【问题标题】:Running JUnit tests programmatically outside of their Eclipse project在 Eclipse 项目之外以编程方式运行 JUnit 测试
【发布时间】:2012-02-16 10:00:11
【问题描述】:

我正在尝试从在 Eclipse 中开发的应用程序运行 JUnit 测试,如下所示:

JUnitCore junitCore = new JUnitCore();
ClassLoader cl = Main.class.getClassLoader();
Class<?> test = cl.loadClass("test.TestCase1");
Result r = junitCore.run(test);

这运行得很好,但是如果测试用例需要使用一些文件,我会得到一个FileNotFoundException。在Eclipse项目中运行同样的测试,测试没有这个错误。我认为这是因为我的JVM 的工作目录(在user.dir 属性中定义)与Eclipse 项目不同。据我所知,我无法在正在运行的 JVM 中更改 user.dir

我可以做些什么来改变这种行为?我唯一的选择是使用与 Eclipse 项目相同的工作目录来启动新的 JVM 吗?如果是这样,我该怎么做,最好不使用 Ant 之类的工具?

编辑: 下面是一个在 Eclipse 项目中通过的测试示例,当我在项目外部以编程方式运行它时会生成 FileNotFoundException

@Test
public void test() throws Exception {
    FileInputStream fstream = new FileInputStream("test1.txt");
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));  
    assertEquals("file content", br.readLine());
}

【问题讨论】:

  • 你能显示代码片段,它会加载你的文件吗?
  • @Umar 您的意思是加载文件的测试示例?我会为你编辑。
  • 只是想知道,当你在 eclipse 中默认有 junit 插件时,你为什么要编写一个运行 junit 的应用程序?
  • @SajanChandran 因为我的工具也在检测测试的类,所以我可以收集一些关于它们的信息。我不只是在运行 JUnit。

标签: java eclipse junit


【解决方案1】:

试试这个代码

new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("filename")));

如果您的文件与 java 类位于同一目录中,则应该加载它。

更新

在这种情况下,尝试在运行 JUnits 测试时指定工作目录

-Duser.dir=somedir

【讨论】:

  • 感谢您的回答。不幸的是,我无法更改项目源,包括测试。
【解决方案2】:

尝试检索您的 JUnit 测试所在的当前目录,然后创建一个导航到 test1.txt 的新文件

String currentDirectory = new File("").getAbsolutePath();

FileInputStream fstream = new FileInputStream(currentDirectory+"\\XYZ\\test1.txt");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多