java - 测试用例失败时使用 EasyTest 时出现 ParameterizedAssertionError

标签 java unit-testing junit4

我想尝试 EasyTest 从 CSV 获取输入参数,并在此处发布的博客中找到了以下写得很好的示例:

http://gpcmol.blogspot.com/2013/06/easytest-unit-testing-with-externalized.html

如果我按照示例操作,它会运行得很漂亮,为我提供一个漂亮的 PDF 输出,正如广告中所宣传的那样。

但是,如果我导致测试用例失败,通过将最后一行输入从“,9,-12”更改为“,9,-13”,我将不再获得 PDF 输出,并且会出现 2 次失败而不是 1 次。

第一次失败是测试用例失败的正确断言。第二次失败是以下异常:

<testcase name="classMethod" classname="TransformCelciusTest" time="0.0">
    <failure message="org.junit.experimental.theories.internal.ParameterizedAssertionError: testToCelsiusConverter(TestInfo [testClass=org.junit.runners.model.TestClass@90bb3e6, dataLoader=org.easetech.easytest.loader.CSVDataLoader@5f4fc5ad, filePaths=[data/temperatureConversionData.csv], methodName=testToCelsiusConverter])" type="org.junit.experimental.theories.internal.ParameterizedAssertionError">org.junit.experimental.theories.internal.ParameterizedAssertionError: testToCelsiusConverter(TestInfo [testClass=org.junit.runners.model.TestClass@90bb3e6, dataLoader=org.easetech.easytest.loader.CSVDataLoader@5f4fc5ad, filePaths=[data/temperatureConversionData.csv], methodName=testToCelsiusConverter])
    at org.easetech.easytest.util.RunAftersWithOutputData.writeData(RunAftersWithOutputData.java:157)
    at org.easetech.easytest.util.RunAftersWithOutputData.evaluate(RunAftersWithOutputData.java:133)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:49)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:48)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:105)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
    at org.easetech.easytest.loader.CSVDataLoader.writeDataToCSV(CSVDataLoader.java:364)
    at org.easetech.easytest.loader.CSVDataLoader.writeData(CSVDataLoader.java:180)
    at org.easetech.easytest.util.RunAftersWithOutputData.writeData(RunAftersWithOutputData.java:154)
    ... 27 more
Caused by: java.lang.NullPointerException
    at org.easetech.easytest.loader.CSVDataLoader.writeOutputData(CSVDataLoader.java:382)
    at org.easetech.easytest.loader.CSVDataLoader.writeDataToCSV(CSVDataLoader.java:347)
    ... 29 more
</failure>
  </testcase>

有人了解如何修改示例,使其正确完成而不出现 ParameterizedAssertionError 异常,以便可以在输出 (PDF) 中正确报告测试用例失败吗?

我认为这是相关的: JUnit @Theory : is there a way to throw meaningful exception?

最佳答案

我使用 EasyTest Core 1.3.1 库测试了该场景,确实这是 EasyTest 1.3.1 中的一个问题(实际上是一个错误)。具体来说,CSVDataLoader 中存在 NullPointerException,因为它需要测试持续时间值,但由于测试失败而不存在。我必须看看这个问题的最佳解决方案是什么。我会随时向您通报解决方案。同时,您可以尝试 Excel 和 XML 数据加载器。或者,如果您想要快速解决方案,您可以复制粘贴 CSVDataLoader 并覆盖 CSVDataLoader 的第 364 行,以便它检查 DURATIOn 是否存在,然后才对其调用 toString。然后你可以在@DataLoader注解中使用这个Loader作为自定义加载器。

谢谢, 阿努吉·库马尔

关于java - 测试用例失败时使用 EasyTest 时出现 ParameterizedAssertionError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233070/

相关文章:

c# - 如何进行单元测试以测试检查请求 header 的方法?

c++ - 如何在不更改/检测模块源的情况下对用户定义的 `operator new` 和 `operator delete` 进行单元测试?

spring - 跨junit测试类重用spring应用程序上下文

java - 使用 JUnit 的内部类中的测试用例

Java Netbeans 直观的参数名称

java将字符添加到字符串中

ios - GHUnit - 终端 - "BAD CPU type in executable"

java - 如何在java中根据国际数字系统转换整数(数字格式)

java - android studio 找不到 java.nio.file

java - @SuiteClasses 与 TestSuite 之间的 JUnit4 类别结果不同