使用通用代码进行Java单元测试

时间:2018-05-22 01:11:17

标签: java java-8

我是Java的新手,如果这是一个愚蠢的问题,请提前道歉。

我注意到我正在编写冗余代码,因为我的测试用例正在测试具有相同对象的不同属性的类似行为。

@Test
public void testInvalidA() {
    obj.setA(null)
    //verify exception thrown if A is null
}

@Test
public void testInvalidB() {
    obj.setB(null)
    //verify exception thrown if B is null
}

有没有办法可以简化这个?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用assertj。示例代码将是这样的,

assertThatIllegalArgumentException().isThrownBy(() -> obj.setB(null));

assertj为某些常见异常提供直接方法。

{{1}}

检查here以获取更多文档。 我同意Dawood的观点,将每个测试分开并保持清晰。

答案 1 :(得分:1)

你做这件事的方式没有任何问题 - 实际上大部分时间都是这样。但是,如果您的示例是复杂性的简化,并且使用类似的可测试签名重复,那么您可以尝试一些函数式编程:

private void nullNotAllowed( Consumer<Object> method ) {
    try {
        method.accept( null );
        fail( "Null Not Allowed");
    }
    catch ( Exception e ) { /*pass*/ }
}

@Test public void nonNullableSetters() {
    YourClass subject = new YourClass();
    nullNotAllowed( subject::setA );
    nullNotAllowed( subject::setB );
}