35

我有以下测试:

@Test(expected = IllegalStateException.class)
public void testKey() {
    int key = 1;
    this.finder(key);
}

但是 JUnit 报告说,测试失败了,尽管它按照预期抛出了一个IllegalStateException.

我是否必须配置其他东西才能运行?


我现在运行测试

@RunWith(Suite.class)
@SuiteClasses(Test.class)
public class TestSuite {

}

就像在这个问题中一样,但仍然没有得到想要的结果。

当我删除test前缀时,我仍然遇到错误。

我得说我使用 Eclipse 运行这些测试,但它被配置为使用 JUnit 4 Runner。

4

8 回答 8

49

问题是,嵌套测试的类是TestCase. 由于这是 JUnit 3 样式,因此注释不起作用。

现在我的测试类是一个独立的类。

于 2011-04-05T11:06:34.290 回答
9
@RunWith(JUnit4.class)
public class MyTestCaseBase extends TestCase 

当我在基本测试中扩展 TestCase 类时,@Test(expected = ...) 注释也有问题。使用 @RunWith(JUnit4.class) 立即有所帮助(我承认,这不是一个非常优雅的解决方案)

于 2014-12-09T18:53:59.310 回答
7

我试过这个,并按预期完美工作。

public class SampleClassTest {
    @Test(expected = ArithmeticException.class )
    public void lost(){
        this.lost(0);
    }
    private void lost(int i) throws ArithmeticException {
        System.out.println(3/i);
    }
}

还要确保将 junit4 添加为依赖项,@(注释)是 junit 4 中的新功能。

于 2012-11-20T11:26:05.943 回答
6

我遇到了同样的问题,解决方案很简单“不要扩展 TestCase 类”

于 2014-01-02T11:01:28.387 回答
3

不,这个 JUnit 测试应该按原样工作——这方面不需要更多的东西。

是什么让您确定测试会抛出IllegalStateException? 它是否有可能被包装到另一个不同类型的异常中?

请发布来自 JUnit 的确切失败消息。

正如@duffymo 所建议的那样,很容易验证测试真正抛出了什么(如果有的话)异常。

于 2011-04-05T10:10:38.903 回答
2

这对我来说是正确的。

检查你的假设。你确定它会抛出异常吗?如果你说的是真的,从注释中删除预期应该会失败。

我会用调试器单步执行代码,看看发生了什么。我假设您有一个可以执行此操作的 IDE,例如 IntelliJ。

于 2011-04-05T10:09:56.993 回答
2

我遇到了同样的问题,我只是更改了导入语句。我删除了 :

import org.junit.jupiter.api.Test;

import junit.framework.TestCase;

并补充说:

import org.junit.Test;

它对我来说很好。

于 2018-01-14T12:23:38.497 回答
0

刚刚在 JUnit4 下测试了这个:这个 DO 工作,测试成功完成。看看是不是这样的。IllegalSelectorException

于 2011-04-05T10:12:13.607 回答