繁体   English   中英

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

[英]How to unit test both cases of a void validate method?

我正在写一个像这样的无效验证方法:

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

为了对该方法进行单元测试,我想同时测试合法和非法输入:

  • 对于非法输入,我使用了(expected = SomeException.class)
  • 我想知道当someObject合法时我们如何测试情况?

在这种情况下,合法的意味着验证无例外地完成。 要对其进行测试,只需调用validate。

@Test
public void testLegal() throws SomeException {
     validator.validate(/* some legal object*/);
}

仅在验证期间引发异常时,此测试才会失败。

第一个测试用例:

@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。

至少有1个断言是强制性的,因为您必须验证抛出的异常是否与预期的一样。

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

示例如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM