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

标签 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
    }

}

仅供引用,第二个测试产生以下 TB:

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

最佳答案

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

看来您正在使用 JUnit 3 的测试运行程序。请尝试以下操作:

  • @Test 添加到您的第一个测试
  • 删除 extends TestCase 子句

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

关于java - 单元测试旨在检查特定故障,但即使抛出了预期的异常,它仍然失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225460/

相关文章:

java - 从 Eclipse 更新 HSQLDB 表

java - 新手需要帮助理解java代码

java - 如何在 Java Junit TestCase 中设置 session 变量

java - 从文件中读取行,并处理每一行中的单个单词?

java - 将 Tomcat(使用 Liferay)配置为 2012R2 服务时出现异常

java - 从系统读取文本文件到 Hbase MapReduce

java - junit 和 psvm 有什么区别

java - 使用 Ant 和 Junit 执行单个测试方法

java - Jackson 映射器到持久化对象

java - 从 junit 获取位于源文件夹中的包的完整路径