我正在尝试编写一个单元测试来验证不可能创建具有负值的特定对象的实例。
我的第一个测试按预期工作正常 - 它应该通过。
我的第二个测试按预期产生了 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/