应断言是否应放在测试用例或验证方法中?

时间:2016-04-01 17:34:42

标签: java junit testng assert

对于回归测试(非单元测试),我们在TestNG中编写了精心设计的场景,是否应该进行Assert检查?是否在测试用例或调用方法中是否重要?例如:

此测试用例调用包含断言的验证方法:

@Test
public void test1() {
    validateResponse();
}

public void validateResponse() {
    Assert.assertEquals(a, "123");
    Assert.assertEquals(b, "455");
    Assert.assertEquals(c, "5678");
    Assert.assertEquals(d, "3333");
}

此测试用例根据验证方法的返回值进行断言:

@Test
public void test1() {
    Assert.assertTrue(validateResponse());
}

public boolean void validateResponse() throws Exception {
    try {
        if (!a.equals("123")) throw new Exception();
        if (!b.equals("455")) throw new Exception();
        if (!c.equals("5678")) throw new Exception();
        if (!d.equals("3333")) throw new Exception();
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

1 个答案:

答案 0 :(得分:2)

您的断言应该尽可能具体和细化,以帮助开发人员快速识别问题。 e.g。

@Test 
public void testResponseFields(){
    // create response to be tested

    // JUnit style
    Assert.assertEquals("Response 'alpha' should be '123'", 123, response.getAlpha());

    // TestNG style
    Assert.assertEquals(response.getAlpha(), 123, "Response 'alpha' should be '123'");
}

在Assert.assertXX调用中设置失败消息之后,调用Assert的位置变得更加荒谬,因为您将有一条消息来解释问题,而堆栈跟踪则可以查看失败的位置和时间