如何以编程方式在Java应用程序中运行所有JUnit测试?

安德鲁·麦金莱(Andrew McKinlay):

在Eclipse中,我可以轻松地在应用程序中运行所有JUnit测试。

我希望能够在没有Eclipse(或Ant或Maven或任何其他开发工具)的情况下从应用程序jar在目标系统上运行测试。

我可以从命令行查看如何运行特定的测试或套件。

我可以手动创建一个套件,列出我的应用程序中的所有测试,但这似乎容易出错-我确定有时会创建一个测试而忘记将其添加到套件中。

Eclipse JUnit插件具有创建测试套件的向导,但是由于某种原因,它没有“看到”我的测试类。它可能正在寻找JUnit 3测试,而不是JUnit 4带注释的测试。

我可以编写一个通过扫描源文件自动创建套件的工具。

或者,我可以编写代码,以便应用程序扫描它自己的jar文件以进行测试(通过命名约定或通过查找@Test批注)。

似乎应该有一个更简单的方法。我想念什么?

安德鲁·麦金莱(Andrew McKinlay):

我的最后一个解决方案遇到了一个小问题。如果我从Eclipse运行“所有测试”,它们将运行两次,因为它们运行了单独的测试和套件。我本可以解决这个问题,但是后来我意识到有一个更简单的解决方案:

package suneido;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class RunAllTests {

    public static void run(String jarfile) {
        String[] tests = findTests(jarfile);
        org.junit.runner.JUnitCore.main(tests);
    }

    private static String[] findTests(String jarfile) {
        ArrayList<String> tests = new ArrayList<String>();
        try {
            JarFile jf = new JarFile(jarfile);
            for (Enumeration<JarEntry> e = jf.entries(); e.hasMoreElements();) {
                String name = e.nextElement().getName();
                if (name.startsWith("suneido/") && name.endsWith("Test.class")
                        && !name.contains("$"))
                    tests.add(name.replaceAll("/", ".")
                            .substring(0, name.length() - 6));
            }
            jf.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return tests.toArray(new String[0]);
    }

    public static void main(String[] args) {
        run("jsuneido.jar");
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Java应用程序内部运行JUnit测试?

如何以编程方式使Android应用程序崩溃?

如何以编程方式从Java应用程序中获取内存,线程和CPU使用情况?

如何以编程方式启动JNLP应用程序?

如何以编程方式获取运行Android 7.0的设备中已安装的浏览器应用程序的列表?

如何以编程方式在应用程序设置中打开应用程序许可窗口

如何以编程方式退出WPF应用程序?

如何以编程方式确定我的应用程序是否在iphone模拟器中运行?

如何以编程方式在Android 10中重新启动应用程序?

如何以编程方式强制使用Java停止Android应用程序?

如何以编程方式使Node.js应用程序崩溃(用于测试)

如何以编程方式快速引用应用程序中的主故事板?

如何以编程方式计算已安装应用程序的所有缓存大小?

如何以编程方式检测内核数并使用所有内核运行MPI程序

如何以编程方式在主屏幕应用程序图标android中设置徽章编号?

如何在Django中以编程方式批准所有已安装的应用程序权限

如何以编程方式隐藏UWP应用程序的键盘?

如何从Java应用程序而不是JUnit测试中运行空手道

您如何以编程方式在有角度的应用程序中的选择字段上触发点击事件?

如何以编程方式确定应用程序是否以Play市场的捆绑销售形式运行

如何以编程方式从Flutter应用程序中启动应用程序?

如何以编程方式打开带有myapp文件夹的默认“文件”应用程序?

如何以编程方式启动Windows Store应用程序?

如何以编程方式更改Eclipse应用程序中的应用程序语言?

如何以编程方式从应用程序打开呼叫面板

如何以编程方式安装应用程序

如何以编程方式设置整个应用程序的主题?

如何以编程方式禁用 Java 应用程序上的 3D 加速?

如何以编程方式在 python 中录制窗口/GUI 应用程序?