我有一些方法可以调用System.exit()某些输入.不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新线程中似乎没有帮助,因为System.exit()终止JVM,而不仅仅是当前线程.是否有任何常见的处理方式?例如,我可以替换存根System.exit()吗?
[编辑]有问题的类实际上是一个命令行工具,我试图在JUnit中测试.也许JUnit根本不适合这份工作?建议使用补充回归测试工具(最好是与JUnit和EclEmma完美集成的东西).
Gradle构建在到达:test任务(junit tests)时失败.它给出了错误
Process 'Gradle Test Executor 1' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)
我在eclipse中使用gradle和一个java项目.Gradle 1.12和Java 7.当在连接到数据库的类上运行测试时,似乎会出现问题.奇怪的是程序和测试作为java应用程序工作正常.数据库连接没有问题,它可以正确编译和运行.gradle是否会做一些可能会弄乱它如何连接到外部数据库服务器?这个问题可能与数据库无关,因此任何解决方案都会受到赞赏.我看过网上和官方的gradle网站,但没有任何帮助.谢谢.
编辑
调试结果:
14:23:28.661 [DEBUG] [TestEventLogger]
14:23:28.661 [DEBUG] [TestEventLogger] Test Run PASSED
14:23:28.665 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':test'
14:23:28.665 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :test FAILED
14:23:28.665 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :test (Thread[main,5,main]) completed. Took 5.552 secs.
14:23:28.666 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[main,5,main]] finished, busy: 6.67 secs, idle: 0.021 secs
14:23:28.808 [LIFECYCLE] [org.gradle.BuildResultLogger]
14:23:28.808 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD FAILED
14:23:28.808 [LIFECYCLE] [org.gradle.BuildResultLogger]
14:23:28.808 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: …Run Code Online (Sandbox Code Playgroud) 我有一个要测试的简单函数。函数是这样的:
void func()
{
// do some work
...
if(error_detected)
{
fatal_error("failure...");
exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我必须编写一个产生错误的测试。只有exit(1)存在失败的测试,仍然如此!
这个案子一般是怎么处理的?
我可以重写/更改功能代码,因为我可以完全控制整个项目。但是,我正在使用 cppunit 并希望我可以将其作为套件中的测试之一。
更新:
关于所提出的一些解决方案,我想提出一个注意事项:添加了一个可以根据我们是否正在测试而以不同方式实现的接口并不是一种强大的测试方式。这是为什么?因为我将使用一个接口进行测试,该接口在测试中的实现与现实世界中的不同。测试结果并不能证明现实世界的情况会正常工作。至少不是 100%(它只能证明该路径确实是在特定情况下采用的。)