2012-11-30 108 views
3

我们的测试套件正在快速增长,并且我们已经达到了更多功能测试依赖于其他系统的程度。使用gradle定制JUnit测试检测

我们使用gradle测试任务来使用include和exclude过滤器来运行这些测试,但这变得很麻烦,因为我们必须以特定的方式命名我们的测试。

我们目前的做法是命名我们的测试通过以下方式:

class AppleSingleServiceTest {} 
class BananaMultiServiceTest {} 
class KiwiIntegrationTest {} 

,然后包括在相关任务测试使用

include '**/*SingleServiceTest.class' 
include '**/*MultiServiceTest.class' 
include '**/*IntegrationTest.class' 

是否有可能找到测试类中gradle这个由看注释?

@SingleServiceTest 
public class AppleTest {} 

我认为没有注释然后将照常运行单元测试的任何测试,所以如果你忘了注释功能更强大的测试将会失败

单一的服务测试的一个例子是其中SUT的任何外部依赖性存根

多服务测试的一个例子硒测试是其中一些,但也许不是所有的外部依赖性不掐灭

+2

虽然这不完全是你要求的,但我认为这个问题可以通过在不同文件夹中放置不同类型的测试来解决。我们就是这么做的。 JUnit支持使用['@ Category'注释](http://stackoverflow.com/questions/2176570/how-to-run-all-tests-belonging-to-a-certain-category-in-junit- 4)。这是[尚未支持gradle](http://issues.gradle.org/browse/GRADLE-2111),但你可能能够解决一些问题。 –

+1

“@ Category”旨在与JUnit套件一起使用。 (是的,我知道这很麻烦)。据我所知,JUnit不提供任何其他方法来按类别过滤。当然,Gradle可以实现自己的基于注释的过滤方法,类似于Maven所做的。 –

+0

@David这是一种可能性,我们可能会尝试它;我的首选是指出它对某些元信息(注释)的测试类型,并将测试的位置留给开发人员(我们目前使用maven样式的项目结构) –

回答

1

该功能你是问for目前不存在,但您可以在http://forums.gradle.org处发出功能请求。或者您可以使用(繁琐的)JUnit @Category,这需要您定义测试套件。

+0

回答这个问题并提供一个替代方案(就像@DavidParsson一样)。投了! –

5

作为Gradle 1.6,摇篮支持用JUnit @Category选择的测试中,是这样的:

test { 
    useJUnit { 
     includeCategories 'org.gradle.junit.CategoryA' 
     excludeCategories 'org.gradle.junit.CategoryB' 
    } 
} 

更多细节可以在the docs找到。

+0

我们已经在使用它了,谢谢你的支持。 –

0

我有类似的需求来过滤测试与注释。我最终设法创建了一个解决方案。它张贴于here