当前位置: 首页 > 面试题库 >

在源代码树而不是包中运行所有测试

闻人修平
2023-03-14
问题内容

我的单元测试与集成测试位于单独的目录树中,但是具有相同的包结构。我的集成测试需要外部资源(例如服务器)可用,但是我的单元测试彼此之间以及与环境之间是完全独立的。

在IntelliJ-IDEA(v7)中,我定义了一个JUnit运行/调试配置,以运行顶层程序包中的所有测试,并且这当然会拾取失败的集成测试。

我想定义一个运行所有单元测试的运行junit配置。有任何想法吗?


问题答案:

答案是创建一个仅包含单元测试文件夹下的那些测试的测试套件,然后运行它。有一个junit-
addon就是这个名字,叫做DirectorySuiteBuilder,但是我只是在重新发明轮子之后才发现的。

在这里已经有人问过!

import junit.framework.JUnit4TestAdapter;
import junit.framework.TestSuite;

import java.io.File;
import java.io.IOException;

public class DirectoryTestSuite {
    static final String rootPath = "proj\\src\\test\\java\\";
    static final ClassLoader classLoader = DirectoryTestSuite.class.getClassLoader();

    public static TestSuite suite() throws IOException, ClassNotFoundException {
    final TestSuite testSuite = new TestSuite();
    findTests(testSuite, new File(rootPath));
    return testSuite;
    }

    private static void findTests(final TestSuite testSuite, final File folder) throws IOException, ClassNotFoundException {
    for (final String fileName : folder.list()) {
        final File file = new File( folder.getPath() + "/" +fileName);
        if (file.isDirectory()) {
        findTests(testSuite, file);
        } else if (isTest(file)) {
        addTest(testSuite, file);
        }
    }
    }

    private static boolean isTest(final File f) {
    return f.isFile() && f.getName().endsWith("Test.java");
    }

    private static void addTest(final TestSuite testSuite, final File f) throws ClassNotFoundException {
    final String className = makeClassName(f);
    final Class testClass = makeClass(className);
    testSuite.addTest(new JUnit4TestAdapter(testClass));
    }

    private static Class makeClass(final String className) throws ClassNotFoundException {
    return (classLoader.loadClass(className));
    }

    private static String makeClassName(final File f) {
    return f.getPath().replace(rootPath, "").replace("\\", ".").replace(".java", "");
    }
}


 类似资料:
  • 对于测试证据,我想将我写到特定目录中的所有测试工件(例如服务器调用和响应)存档。我得到了压缩目录的方法,但我没有找到合适的地方来执行它。 测试生命周期回调似乎不是正确的位置,因为@AfterAll在每个测试类之后被调用,但是存档应该在所有测试类中的所有测试终止后生成。 在阅读了诸如如何在模块中执行之前和之后分别编码一次的帖子之后?似乎没有希望在jUnit中执行调用。 我找到了一个扩展TestLau

  • 我有这个HTML块来控制一个数量: 下面是jQuery代码: 我的问题是因为我在很多地方都有HTML,JS代码控制所有的块,而它应该控制选定的块。 请问我怎么换这个? 多谢了。

  • 我正在尝试将edgetpu USB加速器与Intel ATOM单板计算机和C API结合使用,以进行实时推断。 edgetpu的C API基于TensorFlow lite C API。我需要包括来自tensorflow/lite目录的头文件(例如tensorflow/lite/interpreter.h)。 我的问题是我可以只使用Lite(而不是用于训练的其他操作)构建张量流吗?如果是,我该怎么

  • 然后尝试重新运行: -mvn test-dsurefire.suitexmlfiles=target/surefire-reports/testng-faild.xml 在这个例子中,我有3个测试,在第二个运行中,我得到以下信息: null 最大的问题是它真的在执行所有的三个测试,而我只想重新执行失败的一个。

  • 当我在IntelliJ中运行JUnit测试,其中一个测试失败时,我想通过在结果视图(在“运行”视图中的失败测试列表中)双击它(或右键单击它并选择“跳转到源代码”或“显示源代码”)跳转到失败测试的源代码。然而,这个功能并不总是正常工作。有时会显示源代码,有时会在编辑器窗口中向我显示测试的已编译“.class”文件。我总是希望在双击失败的测试后,在编辑器窗口中看到源代码(“.java”文件),而不是“