我是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
}
有没有办法可以简化这个?
谢谢!
答案 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 );
}