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

Java 单元测试旨在检查特定故障,但即使引发了预期的异常,它仍然会失败?,java,junit,Java,Junit,我正在尝试编写一个单元测试,以验证不可能创建一个具有负值的特定对象的实例 我的第一次测试工作正常,正如预期的-它应该通过 我的第二个测试按预期生成IllegalArgumentException,但是@Testexpected=IllegalArgumentException.class并没有像我预期的那样吸收错误。事实上,该测试的行为似乎与@test行根本不存在完全一样 那么我做错了什么 package numbers; import org.junit.Test; import junit.

我正在尝试编写一个单元测试,以验证不可能创建一个具有负值的特定对象的实例

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

我的第二个测试按预期生成IllegalArgumentException,但是@Testexpected=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)
TestCase是一种JUnit3技术。 @Testexpected=IllegalArgumentException.class用于JUnit4。 看起来您正在使用JUnit3中的测试运行程序。请尝试以下操作:

将@Test添加到您的第一个测试中 drop扩展TestCase子句 如果没有帮助,特别是如果测试不再运行,请检查您使用的JUnit版本。 如果使用maven,请尝试使用-X命令行开关

TestCase是一种JUnit3技术。 @Testexpected=IllegalArgumentException.class用于JUnit4。 看起来您正在使用JUnit3中的测试运行程序。请尝试以下操作:

将@Test添加到您的第一个测试中 drop扩展TestCase子句 如果没有帮助,特别是如果测试不再运行,请检查您使用的JUnit版本。
如果您使用maven,请尝试-X命令行开关。

您使用哪个jUnit版本?3还是4?@Test注释仅适用于JUnit4


当您使用JUnit4时,您也不需要从jUnit.framework.TestCase扩展您的类。

您使用哪个jUnit版本?3还是4?@Test注释仅适用于JUnit4


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

使用@RunWithBlockJUnit4ClassRunner.class注释您的类,或者不扩展TestCase

使用@RunWithBlockJUnit4ClassRunner.class注释您的类,或者不扩展TestCase

您似乎混合了jUnit 3和4版本。你用的是哪种跑步者?你似乎在混合JUnit 3和JUnit 4版本。你使用哪种运行程序?或者将你的方法命名为testFoo,或者将你的方法命名为testFoo,明白了!这就解决了问题。我还必须在Eclipse中使用Junit4测试运行程序,它可以正常工作。谢谢。任何带有@Test注释的公共void都是测试。实际的需求可以更轻松,但我还没有找到合适的规范。如果使用独立于测试框架的规范,就不会遇到此类问题。明白了!这就解决了问题。我还必须在Eclipse中使用Junit4测试运行程序,它可以正常工作。谢谢。任何带有@Test注释的公共void都是测试。实际需求可以更宽松一些,但我还没有找到一个合适的规范。如果使用独立于测试框架的规范,就不会遇到这种问题。