如何对两种情况下的void验证方法进行单元测试?

时间:2017-02-02 07:21:55

标签: java unit-testing junit

我正在编写一个类似这样的void验证方法:

void validate(SomeObject someObject) {
    if (check someObject with constraints) {
        throw new SomeException();
    }
}

要对此方法进行单元测试,我想测试合法和非法输入:

  • 非法输入,我用过(expected = SomeException.class)
  • 我想知道当someObject合法时我们如何测试这个案例?

3 个答案:

答案 0 :(得分:2)

在这种情况下,法律意味着验证完成,没有例外。要测试它,您只需要调用validate。

y[1]

只有在验证期间抛出异常时,此测试才会失败。

答案 1 :(得分:2)

第一个测试案例:

@Test
public void testOK() throws Exception {
    validate(someObject);
    // At Least 1 assertion
}

第二个测试案例:

@Test(expected=SomeException.class)
public void testException() throws Exception {
    try {
        validate(someObject);
    } catch(SomeException e) {
        // At Least 1 assertion
        throw e;
    }
}

在第二个测试用例中,如果没有抛出异常,测试将失败,因为它需要SommeException.class。

至少有一个断言是强制性的,因为你必须验证抛出的异常是否符合预期的异常。

答案 2 :(得分:0)

要测试someObject合法的情况,只需在validate块中调用try即可。如果抛出异常,则测试失败。如果没有抛出异常,请让测试正常结束并通过,因为这是预期的行为。

示例如下所示:

@Test
public void myTest() {
    try {
        validate(new SomeObject());
    } catch (Exception e) {
        fail("expected no exception, but one was thrown.");
    }
}