作者:时尚摄影师阿强_331 | 来源:互联网 | 2022-12-06 18:24
我想测试下面的java程序.
package com.arrays;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Find all pairs in an array of non-negative unique numbers whose sum is equal to k
* For Example. {1,3,4,5,6} and k=9, then {3,6} and {4,5}
*
*/
public class FindAllPairsIfSumToK {
public List findAllPairsWhoseSumIsK(int[] inputArray, int k) {
Set tempSet = new HashSet<>();
List pairs = new ArrayList<>();
for(int i=0;i output1 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray1, 10);
assert (output1.size() == 2) ;
//Test 2
int[] inputArray2 = {1, 2, 5, 6, 12, 15, 16};
List output2 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray2, 17);
assert (output2.size() == 3) ;
}
class Pair{
int value1,value2;
public Pair(int value1, int value2) {
this.value1 = value1;
this.value2 = value2;
}
}
}
这就是我试图测试程序的方式
//Test 1
int[] inputArray1 = {1, 3, 5, 7, 9, 11};
List output1 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray1, 10);
assert (output1.size() == 2) ;
我用Google搜索,但大多数人都在测试网络应用程序.这是测试程序的正确方法吗?或者你能指导一下吗?
1> 小智..:
对于java,有一个名为JUnit的单元测试库.根据您的IDE,您必须以不同的方式包含它,但这是基础知识.如果使用JUnit,您可以编写多个测试用例,这比在main函数中使用测试用例更好,因为您可以更好地组织测试.
如果您正在使用eclipse,要生成一个新的JUnit TestCase,只需右键单击源文件夹并选择:new - > other - > JUnitTestCase,然后选择一个JUnit版本.
在JUnitTestCase中,所有测试都是注释的函数,@Test
并使用assertEqals,assertArrayEquals,assertNonNull等检查结果.如果您创建一个新的源文件夹(称为测试或类似的东西)并创建与程序中相同的包结构,在与要测试的类相同的包中创建测试,您可以访问包私有和受保护的成员,但测试仍然与主程序分开组织.
您的测试使用JUnit看起来像这样:
@Test
public void Test_FindAllPairsIfSumToK(){
FindAllPairsIfSumToK findAllPairsIfSumToK = new FindAllPairsIfSumToK();
int[] inputArray1 = {1, 3, 5, 7, 9, 11};
List output1 = findAllPairsIfSumToK.findAllPairsWhoseSumIsK(inputArray1, 10);
assertEquals (2, output1.size());
//maybe check if the correct ones are output:
output1.foreach(p -> assertEquals(10, p.value1 + p.value2));
}
此外,您可能希望将变量声明为对public final int
,以便可以从包外部访问它们,并且在构造Pair对象后无法更改它们.