我正在尝试编写单元测试来验证是否无法创建具有负值的特定对象的实例。
我的第一次测试按预期工作正常 - 它应该通过。
我的第二个测试产生了预期的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)
答案 0 :(得分:4)
extends junit.framework.TestCase
是一种JUnit 3技术。@Test(expected=IllegalArgumentException.class)
适用于JUnit 4。您似乎正在使用JUnit 3中的测试运行器。请尝试以下操作:
@Test
添加到您的第一次测试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