我试图通过在方法顶部添加一个断言语句来确保参数不能为空。
当单元测试时,我试图声明AssertError是预期的,但它仍然被识别为失败的测试,即使它的行为是正确的(AssertError被抛出)。
class ExampleTest {
@Test(expected=AssertError.class)
public void testAssertFails() {
assert 0 == 1;
}
}
答案 0 :(得分:2)
您可能需要使用-ea
JVM参数启用断言,因为默认情况下它们处于关闭状态。当断言被禁用时,assert
如果失败则不会抛出异常。
如果您在Eclipse中运行此命令,则可以在首选项中编辑已安装的JRE以将其添加为参数,或者将其添加到测试的运行配置中。
此外,抛出的异常是AssertionError
,而不是AssertError
。
答案 1 :(得分:0)
问题是,异常类不是AssertError,而是AssertionError,请查看Java API Javadoc。
答案 2 :(得分:0)
将JVM级断言与JUnit断言混合可能不是一个好主意。也就是说,这是在我们注释之前它是如何完成的。您可以考虑这样做只是为了清晰/文档:
public class Foo {
public void someMethod(String someArg) {
if (s == null) throw new NullPointerException("someArg cannot be null");
}
}
public class FooTest {
public void testSomeMethodNullArg() {
try {
foo.someMethod(null);
fail("someMethod failed to throw NullPointerException for null arg");
} catch (NullPointerException expected) {
// expected exception
}
}