如何使用setUp()和tearDown()多次调用assertXXX

时间:2009-12-08 09:18:11

标签: unit-testing testing junit

我正在使用JUnit。 我想在测试方法中多次调用assertEquals()来测试许多不同的测试用例,但我不想有很多测试方法。 所以我使用setUp()和tearDown()。 但是当第一个assertEquals()失败时。第二个assertEquals()不起作用,并且setUp()方法只被调用了一次。

这是我的代码

public class ComputeServiceTest extends TestCase {

private ComputeServices instance = new ComputeServices();


public ComputeServiceTest(String name)
{
    super(name);        
}

protected void setUp()
{
    System.out.println("aaaaaaaaaaaaaaaaaaaaa");
    instance  = new ComputeServices();
}

protected void tearDown() {

}

//test add method
public void testAdd1()
{               
    //instance = new ComputeServices();
    //First test case 
    int x1 = 7;
    int y1 = 5;

    int expResult1 = 13;
    int result1 = instance.add(x1, y1);
    assertEquals("First test case fail",expResult1, result1);   

    //  Second test case
    System.out.println("AAAAAAAAAAAAAAAAAAAAAaaaaaaaaaa");
    int x2 = 9;
    int y2 = 6;

    int expResult2 = 16;

    int result2 = instance.add(x2, y2);
    assertEquals("Second test case fail",expResult2, result2);
}

}

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:3)

尝试使用parametrized tests

答案 1 :(得分:3)

我认为您没有正确使用该工具(JUnit)。

单元测试可能失败或成功,没有半成功或半失败的测试。

对于每个测试,单个设置必须足够,如果您需要多个设置调用,那么您将多个测试放在一个中。

我认为将测试分成许多小测试没有任何缺点。安装和拆卸不应该很重,测试应该按照ms的顺序运行,测试的粒度越高越好,所以你确切地知道哪些功能已经停止工作。

答案 2 :(得分:0)

你应该让它们起作用,或者如果你现在不想要,那就把它们写进很多测试方法。

此致

麦克 [; - )

答案 3 :(得分:0)

如果你真的想要只有一种测试方法,你可以在你的独特测试方法结束时有一个断言:

assertEquals("my big assertion", 
             true, 
             ((expResult1==result1) && (expResult2, result2));

但我不会建议:你怎么知道哪个测试失败呢?你没有任何细节。

为什么不想避免在TestCase中使用多种测试方法?可能有另一种方法来实现你想要的。