如何将变量用于junit @Test的“expected”属性?

时间:2013-01-02 00:03:15

标签: java generics junit

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

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

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

我使用clazz时遇到的编译错误是:

  

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

有解决方法吗?

3 个答案:

答案 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)

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