【发布时间】:2017-12-26 11:39:42
【问题描述】:
这个问题更像是一种最佳实践方法。我们拥有的应用程序是 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'
}
但是,如果这样做,如果在 IDE 中使用 Spring 测试运行程序单独运行单元测试,则无法找到任何测试。我考虑过在 Jenkins 任务中传递一个布尔值来执行此操作,例如
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'
}
}
但是,这似乎是一种 hack/kludge... 寻找一些“最佳实践”方法来处理此问题的任何方法。 JUnit 是快速运行 Java 进程的正确方法吗?还有其他选择吗?是否可以创建一个 Gradle 脚本,开发人员也可以使用它来调用常见的 Java (Spring Boot) 进程?
【问题讨论】:
标签: java spring unit-testing gradle junit