我有以下代码,并针对它的正面和负面条件编写了两个测试。但是基于TDD,我应该为整个代码写一个负面测试以及我应该怎么写呢?
“每项要求必须至少有两个单元测试用例:一个正面测试 和一个负面测试。 如果需求具有子需求,则每个子需求必须至少有两个 测试案例为正面和负面。“
代码
public class A {
boolean myOuput(int a) {
System.err.println(a);
if(a == 5)
return true;
else
return false;
}
测试
public class ATest {
static A a;
public ATest() {
}
@BeforeClass
public static void setUpClass() {
a = new A();
}
@AfterClass
public static void tearDownClass() {
System.err.println("tearDown class");
}
@Before
public void setUp() {
System.err.println("setUp");
}
@After
public void tearDown() {
System.err.println("tearDown");
}
@Test
public void testOutputNotFive(){
assertEquals(false,a.myOuput(0));
}
@Test
public void testOutputForFive(){
assertEquals(true,a.myOuput(5));
}
}
答案 0 :(得分:1)
我不确定你在哪里引用,但是我已经做了几年的TDD并且会写下这两个测试:
shouldReturnTrueIfInputIsFive() {...}
shouldReturnFalseIfInputIsNotFive() {...}
这涵盖了100%的代码 - 这就是你想要的:)
编辑:作为旁注 - 如果您执行TDD,您希望测试尽可能具有描述性(它们实际上替换文档)。有一个明确的命名模式,如应该 - 什么 - 当非常有帮助时,因为如果testOutputNotFive
之类的东西没有给出关于期望的结果......
答案 1 :(得分:1)
您的问题显示了一个非常简单的例子。在测试中,我们经常发现边界条件周围发生错误。在边界条件的任何一侧,您倾向于具有等价分区。即返回相同结果的一系列值。例如,保险单可能对人的年龄有限制。该人必须年满18-65岁才能购买该政策。在这个例子中,18和65是边界。您应该为18和65编写测试。您还应该编写17的测试,即比下边界少1(所有低于17的值都在17的相同等价分区上)。您需要对66执行相同的操作。测试19和64将确保您还覆盖了内部等效分区。