我是 JUnit 测试的新手。
例如,我的项目中有一个 Misc 类:
public class Misc{
public static int computeValue(int x,int y,int z)
{
int value = 0;
if((x==y)||(z==0))
value = x+2;
else if(x>y)
value = y+4;
else
value = z;
return value;
}
}
我在 JUnit 类中进行了尝试,但我不太确定我是否正确完成了它。
public class MiscTest {
@Test
public void testXEqualToY() {
//Only X is equal to Y and z is not zero
int x = 5,y=5;
int value = 0;
value = Misc.computeValue(5, 5, 10);
assertEquals("test error",x,y,value);
}
@Test
public void testZEqualZero(){
//Only z is 0
int x=4,y=8,z=0;
int value = 0;
value = Misc.computeValue(11,5,0);
assertEquals("test error",z,value);
}
我应该在测试用例方法中放入什么来测试这些值?
最佳答案
Parameterized 会很有用。当您想要为一堆不同的输入情况指定预期结果时,参数化
确实很棒。此处只需要一个 @Test
,只需简单添加 { 0, 0, 0, 2 },
现在测试每个案例:
- 当 x=y 时,期望 X+2
- 当 z=0 时,期望 x+2
- 当 x > y 时,期望 y+4
- 否则,预计为 z
这是基本结构
@RunWith(Parameterized.class)
class MyTest{
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ { 0, 0, 0, 2 },... });
}
int x,y,z, expectedResult;
// add constructor here
@Test
public void testYEqualToZ(){
int actualResult = Misc.computeValue(x,y,z);
assertEquals(actualResult, expectedResult);
}
}
然后使用以下测试用例:
- 1, 1, 5, 3//x y 相等
- 2, 2, 8, 4//再次
- 3, 6, 0, 5//z 为 0 情况
- 3, 2, 8, 6//x > y 情况
- 3, 4, 8, 8//x < y 情况
不断添加案例,直到测试完所有可能的案例
关于java - Java单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865721/