我正在尝试编写通用测试类,但我找不到指定expected
注释的@Test
属性的通用方法。这是我的代码的简化版本:
public class MyTest<T extends Throwable> {
Class<T> clazz; // set in constructor
@Test(expected=clazz)
public void test() {
}
}
我使用clazz
时遇到的编译错误是:
注释属性Test.expected的值必须是类文字
有解决方法吗?
答案 0 :(得分:3)
这不是一个junit问题。你只是不能在java注释中使用变量。我不知道你到底想要实现什么,但也可以使用junit规则设置预期的异常。他们可以继承
答案 1 :(得分:1)
您可以使用JUnit的ExpectedException.
public class MyTest<T extends Throwable> {
@Rule
public ExpectedException thrown = ExpectedException.none();
Class<T> clazz; // set in constructor
@Test
public void test() {
thrown.expect(clazz);
}
}
答案 2 :(得分:0)
从测试的角度来看,这是一个有趣的问题。您已编写了一个预期会失败的单元测试,但在测试运行之前,您不知道它将如何失败。我认为你需要创建更好的单元测试。如果测试失败,你肯定应该知道你希望它如何失败。事实上,你应该确保它总是以完全相同的方式失败。