2015-07-10 31 views
0

背景:在不同的项目中使用JunitCore用于测试

我目前的工作在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

JUnitCore希望读取加载的类,而不是JAR中的类文件。您真正的问题可能是如何加载JAR(或.class文件的目录),以便它可以运行。

拨打URLClassLoader;一旦你适当地修改了类路径,你可以从findClass中得到一个类,并将它传递给你找到的JUnitCore方法。

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); 
    } 
} 

然后你的服务器只需要构建与包括测试,JUnit的jar文件,以及包含MyRunner一个jar坛子里一个java命令行。

相关问题