这个问题更像是一种最佳实践方法。我们的应用程序是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任务中传入一个布尔值来执行此操作,例如。
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'
}
}
然而,这似乎是一个黑客/ kludge ......任何寻找一些“最佳实践”方法来处理这个问题的方法。 JUnit是快速运行Java进程的正确方法吗?还有其他选择吗?是否可以创建一个Gradle脚本,开发人员也可以使用它来调用常见的Java(Spring Boot)进程?
答案 0 :(得分:1)
我认为您可以使用JUnit的@SuiteClasses注释在测试套件中对非实际测试进行分组:
@Suite.SuiteClasses(DatabaseCreationProcessImplTest.class)
public class NotReallyTests {}
然后使用从Jenkins命令行传递的条件来排除not-really-tests套件:
test {
if (project.hasProperty('excludeNotReallyTests')) {
useJunit {
excludeCategories 'fully.qualified.name.of.your.NotReallyTests'
}
}
}
您的Jenkins命令行将是
$ gradle -PexcludeNotReallyTests=true
它比您的解决方案稍微不那么苛刻,因为它会跟踪代码库中没有真正测试的测试分组,而不是build.gradle
文件。
答案 1 :(得分:0)
Android的Testing API提供了几个用于将测试组合在一起的注释。然后,您可以通过在命令行上提供其中一个注释来指定要运行的测试。我不知道如何实现这一点的细节。如果您有兴趣,这只是建议您自己探索。