使用JunitCore进行不同项目的测试

时间:2015-07-10 17:39:10

标签: java eclipse junit

背景:

我目前正处理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,所以这对我来说是一个很大的挑战。

2 个答案:

答案 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。