单元测试旨在检查特定的故障,但即使抛出预期的异常,它仍然会失败?

时间:2012-02-10 09:24:32

标签: java junit

我正在尝试编写单元测试来验证是否无法创建具有负值的特定对象的实例。

我的第一次测试按预期工作正常 - 它应该通过。

我的第二个测试产生了预期的IllegalArgumentException,但是@Test(expected = IllegalArgumentException.class)没有像我预期的那样吸收错误。实际上,测试看起来就像@Test行完全不存在一样!

那么我做错了什么?

package numbers;
import org.junit.Test;
import junit.framework.TestCase;
public class TestPositiveMoney extends TestCase {

    public void testConstructFromLong(  ) {
        // Works OK
        PositiveMoney x0 = new PositiveMoney( 3L );
    }

    @Test(expected=IllegalArgumentException.class)
    public void testConstructInvalid( ) {
        // This statement is intended to fail
        PositiveMoney x0 = new PositiveMoney( -3L ); // Illegal
    }

}

仅供参考,第二次测试产生以下结核病:

java.lang.IllegalArgumentException: Negative value -3 not allowed
    at numbers.PositiveMoney.<init>(PositiveMoney.java:48)
    at numbers.TestPositiveMoney.testConstructInvalid(TestPositiveMoney.java:13)

3 个答案:

答案 0 :(得分:4)

  • extends junit.framework.TestCase是一种JUnit 3技术。
  • @Test(expected=IllegalArgumentException.class)适用于JUnit 4。

您似乎正在使用JUnit 3中的测试运行器。请尝试以下操作:

  • @Test添加到您的第一次测试
  • drop extends TestCase子句

如果它没有帮助 - 特别是如果测试不再运行 - 请检查您正在使用的JUnit版本。
如果您使用maven,请尝试-X命令行开关。

答案 1 :(得分:3)

你使用哪个jUnit版本? 3或4? @Test anntoation仅适用于jUnit 4。

当你使用jUnit 4时,你也不需要从junit.framework.TestCase扩展你的类。

答案 2 :(得分:1)

使用@RunWith(BlockJUnit4ClassRunner.class)为您的课程添加注释,或者不延长TestCase