【问题标题】:How to write a negative test for the method based on TDD?如何为基于TDD的方法编写否定测试?
【发布时间】:2014-09-26 01:30:10
【问题描述】:

我有以下代码,并为它的正面和负面条件编写了两个测试。但是基于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));
    }

}

【问题讨论】:

    标签: java unit-testing junit tdd


    【解决方案1】:

    我不确定你从哪里引用,但我从事 TDD 已经有几年了,并且会编写这两个测试:

    shouldReturnTrueIfInputIsFive() {...}
    
    shouldReturnFalseIfInputIsNotFive() {...}
    

    这涵盖了 100% 的代码 - 这就是你想要的 :)

    编辑:附带说明 - 如果您使用 TDD,您希望测试尽可能具有描述性(它们实际上替换文档)。有一个像 should - what - when 这样的清晰命名模式非常有帮助,因为如果像 testOutputNotFive 这样的东西没有给出关于 期望的结果...

    【讨论】:

    • 在那种情况下,我拥有的这两种方法涵盖了代码,对吗? testOutputNotFive() 和 testOutputForFive(){
    • 确实如此。虽然对您的需求一无所知,但将测试映射到需求却是另一回事。
    【解决方案2】:

    您的问题显示了一个非常简单的示例。在测试中,我们经常会发现错误发生在边界条件附近。在边界条件的任一侧,您往往会有一个等价分区。即返回相同结果的一系列值。例如,保险单可能对人的年龄有限制。投保人必须是 18-65 岁。在这个例子中,18 和 65 是边界。您应该为 18 和 65 编写一个测试。您还应该为 17 编写一个测试,即比下边界少 1(所有低于 17 的值都在从 17 开始的同一个等价分区上)。您需要对 66 执行相同的操作。测试 19 和 64 将确保您也覆盖了内部等价分区。

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多