JUnit 4.8包含一个名为"Categories"的新功能,允许您将某些类型的测试组合在一起.这非常有用,例如,为慢速和快速测试分别进行测试.我知道JUnit 4.8发行说明中提到的内容,但是想知道我如何实际运行所有使用某些类别注释的测试.
JUnit 4.8发行说明显示了一个示例套件定义,其中SuiteClasses注释选择要运行的特定类别的测试,如下所示:
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
// Will run A.b and B.c, but not A.a
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何在SlowTests类别中运行所有测试?您似乎必须拥有SuiteClasses注释...
我使用Java,Selenium,Junit,Maven开发了一整套自动化测试.
对于每个测试,它们都有一个或多个@Category注释,描述每个测试涵盖的软件区域.例如:
@Test
@Category({com.example.core.categories.Priority1.class,
com.example.core.categories.Export.class,
com.example.core.categories.MemberData.class})
@Test
@Category({com.example.core.categories.Priority1.class,
com.example.core.categories.Import.class,
com.example.core.categories.MemberData.class})
@Test
@Ignore
@Category({com.example.core.categories.Priority2.class,
com.example.core.categories.Import.class,
com.example.core.categories.MemberData.class})
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是找到一种方法来计算包含任何给定类别的测试数量.所有可能的类别都是文件//com/example/core/categories夹中的文件名作为源列表.
我已经尝试构建一个shell脚本来进行单词计数,这似乎工作正常,但我认为会有更多"内置"来处理@Category.
我最大的问题是,即使我得到正确的计数,很可能一个或多个测试被标记为@Ignore,这应该使测试@ Category的无效但没有大量使用标志并逐行读取每个文件为了它丢掉正确的计数.
是否有一个很好的方法来逐项列出@Ignore中的@ Category?
示例输出
| Category | Count |
|----------------------------------------------|------:|
| com.example.core.categories.Export.class | 1 |
| com.example.core.categories.Import.class | 1 |
| com.example.core.categories.MemberData.class | 2 |
| com.example.core.categories.Priority1.class | 2 |
| com.example.core.categories.Priority2.class | 0 |
| com.example.core.categories.Priority3.class | 0 |
Run Code Online (Sandbox Code Playgroud) 我想只运行我的单元测试的一个子集,由特定的测试定义@Category.
所以我读了几个SO问题,比如这个(这正是我要找的),还有这个问题.
我的问题的解决方案似乎是由ClasspathSuite项目提供的.所以我开始编写定义我的测试类别的接口NewTest和OldTest接口.然后,我创建了AllTests套件:
@RunWith(ClasspathSuite.class)
public class AllTests { }
Run Code Online (Sandbox Code Playgroud)
之后,我创建了一个AllNewTests套件:
@RunWith(Categories.class)
@IncludeCategory(NewTest.class)
@SuiteClasses( { AllTests.class })
public class AllNewTests { }
Run Code Online (Sandbox Code Playgroud)
最后,我创建了两个JUnit类,每个类别一个:
@Category(NewTest.class)
public class SomeNewTests {
// some tests...
}
@Category(OldTest.class)
public class SomeOldTests {
// some tests...
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行AllTests,Eclipse会启动我项目的所有测试,而Maven会因为没有找到测试而失败:
mvn test -Dtest=AllTests
...
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running my.company.AllTests
Tests run: 0, Failures: 0, Errors: 0, Skipped: …Run Code Online (Sandbox Code Playgroud) 我的问题与这个问题类似,但它指的是Gradle“不是” Maven。
我已使用注释标记了项目中的多个测试@Category,并创建了我的测试套件(见下文)。
如何使用 Gradle 运行它?
测试套件:
@RunWith(Categories.class)
@Categories.IncludeCategory(MyTestSuite.class)
@Suite.SuiteClasses(ClassUnderTest.class)
public interface MyTestSuite {
}
Run Code Online (Sandbox Code Playgroud) junit ×4
java ×3
unit-testing ×2
categories ×1
gradle ×1
junit4 ×1
maven ×1
surefire ×1
test-suite ×1