背景:
我目前正处理eclipse中的一个项目,该项目以编程方式执行推送到服务器的JUnit测试。
到目前为止一切正常但我想知道测试结果(特别是任何失败),所以我可以将它们推送到电子邮件中。现在测试只是输出到控制台,但这似乎并没有给我很多实际使用的输出。
现在我使用Runtime类来调用测试,但似乎没有获得结果所需的功能。 我查看了JUnitCore类,但无法调用当前java项目之外的任何测试。
所以我的主要问题是如何使用JUnitCore在特定的JAR文件中运行junit测试?或者是否有更简单的方法来使用不同的类来解决这个问题?
这是我唯一能够上班的事情:
RunTests()
{
junitCore = new JUnitCore();
junitCore.run(AllTests.class);
}
但我想按照以下方式做点什么:
RunTests()
{
junitCore = new JUnitCore();
junitCore.run("C:\\$batch\\test\\hil research\\201507071307\\CommsTestRunner\\plugins\\TestSuite\\US35644.class");
}
我很感激我对这个问题的任何建议。我是EE,上个月刚刚介绍给java,所以这对我来说是一个很大的挑战。
答案 0 :(得分:0)
JUnitCore期望读取加载的类,而不是JAR中的类文件。您真正的问题可能是如何加载JAR(或.class
文件的目录),以便它可以运行。
点击URLClassLoader;一旦你适当地修改了类路径,就可以从findClass
中获取一个Class,并将它传递给你找到的JUnitCore方法。
答案 1 :(得分:0)
由于测试可能包含服务器也使用的类(但不一定是同一版本),我建议不要让服务器直接运行测试。相反,您可以让服务器启动运行测试的新JVM。这就是像Eclipse这样的IDE运行测试的方式。您只需编写一个具有JUnit运行测试的主类,并将结果序列化到磁盘上。
你的主要课程看起来像这样:
public class MyRunner {
public static void main(String... args) throws IOException {
String path = System.getProperty("resultPath");
if (path == null) {
throw new NullPointerException("must specify resultPath property");
}
// Possibly install a security manager to prevent calls to System.exit()
Result result = new JUnitCore().runMain(new RealSystem(), args);
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path)) {
out.writeObject(result);
}
System.exit(result.wasSuccessful() ? 0 : 1);
}
}
然后,您的服务器只需要构建一个java
命令行,其中包含测试的Jars,JUnit jar文件和包含MyRunner
的jar。