代码之家  ›  专栏  ›  技术社区  ›  Mike Cargal

Junit(3.8.1)测试是否抛出异常(在单元测试中工作,添加到测试套件时失败)

  •  0
  • Mike Cargal  · 技术社区  · 16 年前

    public void testParseException() {
    
        try {
            ClientEntitySingleton.getInstance();
            fail("should have thrown exception.");
        } catch (RuntimeException re) {
            assertEquals(
                "<exception message>",
                re.getMessage());
        }
    }
    

    每当我运行一个unitTest类时,它都可以正常工作(绿色条)。但是,当我将该测试添加到testSuite中时,会在异常中报告一个红条单元测试失败。

    还有一件事。。。如果它是测试套件中的第一个测试,那么它可以在测试套件中工作。实际上,我正在做其中的两个测试,刚刚发现如果我把它们作为套件中的前两个测试,一切都很好,但是如果之前有一个“常规”测试,我就会失败。所以我有一个工作,但没有真正的答案。

    有什么想法吗?

    以下是“失败”的堆栈跟踪

    在com.someco.someprod.clientEntityManagement.ClientEntitySingleton.addClientEntity(ClientEntitySingleton.java:247) 访问com.someco.someprod.clientEntityManagement.ClientEntitySingleton.startElement(ClientEntitySingleton.java:264) 位于org.apache.xerces.parsers.AbstractSAXParser.startElement(未知源代码) 位于org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(未知来源) 位于org.apache.xerces.impl.xmldocumentfragmentscannerpl$FragmentContentDispatcher.dispatch(未知源) 位于org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知来源) 位于org.apache.xerces.parsers.XML11Configuration.parse(未知源代码) 位于org.apache.xerces.parsers.XML11Configuration.parse(未知源代码) 位于org.apache.xerces.parsers.AbstractSAXParser.parse(未知源代码) 在com.someco.someprod.clientEntityManagement.ClientEntitySingleton.parse(ClientEntitySingleton.java:216) 位于com.someco.someprod.clientEntityManagement.ClientEntitySingleton.setInputSourceProvider(ClientEntitySingleton.java:88) 在com.someco.someprod.clientEntityManagement.test.TestClientBase.setUp(TestClientBase.java:17) 在com.someco.someprod.clientEntityManagement.test.TestClientEntityDup.setUp(TestClientEntityDup.java:8) 位于junit.framework.TestResult$1.protect(TestResult.java:106) 位于junit.framework.TestResult.runProtected(TestResult.java:124) 位于junit.framework.TestResult.run(TestResult.java:109) 在junit.framework.TestCase.run(TestCase.java:118) 位于junit.framework.TestSuite.runTest(TestSuite.java:208) 位于junit.framework.TestSuite.run(TestSuite.java:203) 位于junit.framework.TestSuite.run(TestSuite.java:203) 位于org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

    3 回复  |  直到 16 年前
        1
  •  2
  •   Jeff Storey    16 年前

    您是否尝试过将测试分岔到一个单独的JVM中,看看是否仍然存在问题?

        2
  •  0
  •   matt b    16 年前

    RuntimeException ,它有大约一千个子类。

    根据你的班级名称,听起来好像你只是在期待 ParseException . 这是你在考试中应该抓住的。

        3
  •  0
  •   Mike Cargal    16 年前

    只是意识到我从来没有发布过这个问题的“答案”。

    ClientEntitySingleton是这样设置的,以便在初始化时,它只缓存要加载的xml文件的名称。它在第一个引用中加载,如果在加载单例数据后更改文件名,则会重新加载。

    因此,只要失败发生在成功加载之前,解析就发生在测试用例期间(第一次访问)。一旦我成功地加载了一个XML文件,以后对源文件属性的任何更改都会触发对XML文件的立即解析。不幸的是,我在测试设置方法中设置了文件名(实际上就在堆栈跟踪中。)