我需要为此代码创建Junit 4测试用例的帮助。
public static int computeValue(int x, int y, int z)
{
int value = 0;
if (x == y)
value = x + 1;
else if ((x > y) && (z == 0))
value = y + 2;
else
value = z;
return value;
}
编辑
我想要这样的东西来测试如果其他语句
public class TestingTest {
@Test
public void testComputeValueTCXX() {
}
…
@Test
public void testComputeValueTCXX() {
}
}
让您开始的东西...
首先是"扩展"版本,可能对"新手"更有用:
@Test
public void testXandYEqual() {
// arrange
int x=0;
int y=0;
int anyValueBeingIgnored=0;
// act
int result = ThatClass.computeValue(x, y, anyValueBeingIgnored);
// assert
assertThat(result, is(1));
}
以上测试IFS级联的第一个情况;断言是许多少年主张之一;IS()是一种hamcrest Matcher方法。此外,这就是我写那个测试柜的方式:
@Test
public void testXandYEqual() {
assertThat(ThatClass.computeValue(0, 0, 1), is(1));
}
(主要区别是:对我来说,单位测试不应包含我不需要的任何信息;从这个意义上讲:我希望它尽可能纯净,简短,简洁)
)基本上,您想编写不同的测试,以涵盖通过逻辑的所有路径。您可以使用许多现有的覆盖工具之一来确保您涵盖所有路径。
另外,您也可以研究参数化测试。含义:您不会创建大量的测试方法,每个测试方法都只用不同的参数调用您的真实方法,而是将所有不同的"调用参数"放入 table ;然后Junit从该表中获取所有数据,并在调用正在测试的"目标"方法时使用该数据。
类似的东西。
@Test
public void testcomputeValueWithXYandZAsZero() {
int result = YourClass.computeValue(0, 0, 0);
Assert.assertEquals(1, result);
}
确保用不同的输入编写测试用例,以便涵盖静态方法的所有分支。
您可以使用Eclemma之类的插件来检查测试的覆盖范围。http://www.eclemma.org/
假定您的测试方法位于类stackoverflow中。您需要一个名为StackoverFlowTest的测试类。这就是外观:
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author someAuthor
*/
public class StackoverflowTest {
public StackoverflowTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
// TODO add test methods here.
// The methods must be annotated with annotation @Test. For example:
//
// @Test
// public void hello() {}
// Here you test your method computeValue()
// You cover all three cases in the computeValue method
@Test
public void computeValueTest() {
assertTrue(3 == computeValue(2, 2, 0));
assertTrue(4 == computeValue(3, 2, 0));
assertTrue(200 == computeValue(1,2,200));
}
}