1

我正在尝试编写一个通用测试类,但我找不到指定注释expected属性的通用方法。@Test这是我的代码的精简版:

public class MyTest<T extends Throwable> {
    Class<T> clazz; // set in constructor

    @Test(expected=clazz)
    public void test() { 
    }
}

我使用的编译器错误clazz是:

注释属性 Test.expected 的值必须是类文字

有没有解决的办法?

4

3 回答 3

3

这不是junit问题。您只是不能在 java 注释中使用变量。我不知道您到底想达到什么目标,但也可以使用 junit 规则设置预期的异常。他们可以被继承

于 2013-01-02T00:08:36.353 回答
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); 
    }
}
于 2013-01-02T13:36:30.690 回答
0

从测试的角度来看,这是一个有趣的问题。你已经编写了一个预期会失败的单元测试,但是在测试运行之前你不知道它会如何失败。我认为您需要创建更好的单元测试。如果测试将失败,您绝对应该知道您期望它如何失败。事实上,您应该确保它总是以完全相同的方式失败。

于 2013-01-02T06:07:21.297 回答