首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用JUnit实现两个变量互换的测试方法

用JUnit实现两个变量互换的测试方法
EN

Stack Overflow用户
提问于 2015-07-07 06:29:29
回答 3查看 910关注 0票数 3

我有一个用来交换两个变量的方法的类。它不返回任何内容。

代码语言:javascript
代码运行次数:0
运行
复制
public void swap(int a, int b) {
    a ^= b;
    b = a ^ b;
    a = a ^ b;
}

如何使用JUnit进行测试?它甚至不会引起任何副作用。

EN

回答 3

Stack Overflow用户

发布于 2015-07-07 06:33:38

没有什么可测试的。

该方法什么也不做:它返回void,并且没有副作用(没有突变,...)。

票数 2
EN

Stack Overflow用户

发布于 2015-07-07 06:33:29

您的方法不只是不返回任何内容,它什么也不做,至少在可观察到的副作用方面是这样。

如果你想让你的方法变得有用,你需要改变它来做一些你可以观察到的事情。例如,您可以将其更改为接受单元素数组参数:

代码语言:javascript
代码运行次数:0
运行
复制
public void swap(int[] a, int[] b) {
    a[0] ^= b[0];
    b[0] = a[0] ^ b[0];
    a[0] = a[0] ^ b[0];
}
票数 1
EN

Stack Overflow用户

发布于 2015-07-07 07:16:00

您编写的函数不会对'a‘和'b’的值执行任何交换,因为在java中,基元类型的值是按值传递的。

代码语言:javascript
代码运行次数:0
运行
复制
public void swap(int a, int b) {
    a ^= b;
    b = a ^ b;
    a = a ^ b;
}

建议的函数是将值放入长度为1的数组中,然后执行交换操作,因为数组是按引用传递的。

代码语言:javascript
代码运行次数:0
运行
复制
public void swap(int[] a, int[] b) {
    a[0] ^= b[0];
    b[0] = a[0] ^ b[0];
    a[0] = a[0] ^ b[0];
}

但是,当数组a和b引用相同的数组时,该函数将失败。上面的函数将使作为两个参数的参数传递的数组的第零个元素为零。因此,我们需要以以下方式更改上述函数:-

代码语言:javascript
代码运行次数:0
运行
复制
public void swap(int[] a, int[] b) {
    if (a == b) { //do not swap 
        return;
    }

    if (a ==null) {
        return;
    }

    if (b ==null) {
        return;
    }

    a[0] ^= b[0];
    b[0] = a[0] ^ b[0];
    a[0] = a[0] ^ b[0];
}

我将为上面的代码推荐一些Junit测试用例。您可以使用JUnit包中的assertEquals()来测试a1和b1中的值(如果它们被交换)。

代码语言:javascript
代码运行次数:0
运行
复制
//both a[0] and b[0] are different values
int[] a = {4};
int[] b = {5};

int copy_a = a[0];
int copy_b = b[0];

swap(a, b);

assertEquals("copy_a should be b[0]", copy_a, b[0]);
assertEquals("copy_b should be a[0]", copy_b, a[0]);

//both a[0] and b[0] are same values
a[0] = 4;
b[0] = 4;

copy_a = a[0];
copy_b = b[0];

swap(a, b);

assertEquals("copy_a should be copy_b", copy_a == copy_b, a[0] == b[0]);

//case when you pass same array as both arguments.

a[0] = 9;
copy_a = a[0];
swap(a, a);
assertEquals("copy_a should be a[0]", copy_a, a[0]);

除了上面建议的测试用例之外,当a[]或b[]为空时,您也可以编写测试用例。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31256758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档