java - 在源树而不是包中运行所有测试

标签 java unit-testing junit intellij-idea

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

在 IntelliJ-IDEA (v7) 中,我定义了一个 JUnit 运行/调试配置来运行顶级包中的所有测试,这当然会选择我失败的集成测试。

我想定义一个运行我所有单元测试的 run-junit 配置。有什么想法吗?

最佳答案

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

这里已经有人问过了!

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

关于java - 在源树而不是包中运行所有测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1293880/

相关文章:

reactjs - redux-observable Promise 在单元测试中没有得到解决

java - 尝试使用 JMockit 部分模拟类时,ClassLoader 抛出 NullPointerException

java - 使用 JNDI 从 Java 在 LDAP 中使用 ppolicy 时如何获取特定错误

java - JSONException : Value <br of type java. lang.String 无法转换为 JSONObject

java - java 中的 Arrays.copyOfRange 方法抛出不正确的异常

java - Spring - Web 应用程序的 Junit

java - 如何使用 Mockito 编写 void 方法的行为?

java - Eclipse 警告消息

python - Django:如何在测试 View 时模拟文件上传

.net - 如何编写生产者-消费者问题解决方案的测试?