java - Spring/JUnit - 运行并非真正的单元测试 "tests"

标签 java spring unit-testing gradle junit

这个问题更多的是最佳实践方法。我们拥有的应用程序是 Spring Boot 1.5.4,并使用 Gradle 构建。我正在使用 Jenkins 创建夜间构建,并希望确保项目中的所有单元测试都通过。

该项目有许多这样的“测试”:

@SpringBootTest(classes = {Application.class})
@RunWith(SpringRunner.class)
public class DatabaseCreationProcessImplTest {

这个特定的类创建一个示例数据库镜像供开发人员使用。当然,我们可以直接编写 SQL 脚本,但 Java 进程很有用,因为有些代码还可以从外部源(例如 Liferay)查询数据。

我们为此使用单元测试的原因是因为开发人员可以轻松地在 IntelliJ 中运行它来加载新的数据库镜像。然而,这并不是真正的“测试”,它使用测试运行器作为运行 Java 进程的快速方法。

我正在设置夜间构建,但我不希望此测试包含在构建中。我可以在构建脚本中执行类似以下操作:

test {
exclude 'com/mydomain/service/util/impl/DatabaseCreationProcessImplTest.class'
}

但是,通过这样做,如果使用 Spring 测试运行程序在 IDE 中单独运行单元测试,则无法找到任何测试。我考虑过在 Jenkins 任务中传递一个 boolean 值来执行此操作,例如

test {
    systemProperties 'property': 'value'
    testLogging {
        events "passed", "skipped", "failed", "standardOut", "standardError"
    }

    // Exclusions go here
    if (Boolean.getBoolean('exclude.tests')) {
        exclude 'com/mydomain/service/util/impl/DatabaseCreationProcessImplTest.class'
    }
}

然而,这似乎是一种黑客/拼凑……任何寻找一些“最佳实践”方法来处理这个问题的方法。 JUnit 是快速运行 Java 进程的正确方法吗?还有其他选择吗?是否可以创建一个 Gradle 脚本供开发人员用来调用常见的 Java (Spring Boot) 流程?

最佳答案

我认为您可以使用 JUnit 的 @SuiteClasses 将您的非真正测试分组到测试套件中。注释:

@Suite.SuiteClasses(DatabaseCreationProcessImplTest.class)
public class NotReallyTests {}

然后使用从 Jenkins 命令行传递的条件来排除非真正测试套件:

test {
    if (project.hasProperty('excludeNotReallyTests')) {
        useJunit {
            excludeCategories 'fully.qualified.name.of.your.NotReallyTests'
        }
    }
}

你的 Jenkins 命令行将是

$ gradle -PexcludeNotReallyTests=true

它比您的解决方案要简单一些,因为它跟踪代码库中并非真正测试的测试分组,而不是 build.gradle 文件。

关于java - Spring/JUnit - 运行并非真正的单元测试 "tests",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45220387/

相关文章:

java - 用 Java 构建词法分析器

java - 如何在Spring Data中进行Mongo聚合查询?

java - Spring3排除绑定(bind)表单字段

java - Spring Boot Jar 中的类路径扫描不起作用

java - 如何对复杂类进行 Java 单元测试

unit-testing - 在单元测试中使用随机值有什么缺点?

java - 通过循环增加文件名来保存视频文件

java - Python - IPython Notebook 无法找到 Java 可执行文件

java - 具有空日期和整数字段的 Postgres 复制

javascript - 是否可以对这个 javascript 结构进行单元测试?