假设我对这个问题的理解是正确的,实际上可以使用JUnit来完成.下面的代码与JUnit 4.11一起使用,并允许我们将所有测试分为两类:“未分类”和集成.
IntegrationTestSuite.java
/**
* A custom JUnit runner that executes all tests from the classpath that
* match the ca.vtesc.portfolio.*Test
pattern
* and marked with @Category(IntegrationTestCategory.class)
* annotation.
*/
@RunWith(Categories.class)
@IncludeCategory(IntegrationTestCategory.class)
@Suite.SuiteClasses( { IntegrationTests.class })
public class IntegrationTestSuite {
}
@RunWith(ClasspathSuite.class)
@ClasspathSuite.ClassnameFilters({ "ca.vtesc.portfolio.*Test" })
class IntegrationTests {
}
UnitTestSuite.java
/**
* A custom JUnit runner that executes all tests from the classpath that match
* ca.vtesc.portfolio.*Test
pattern.
*
* Classes and methods that are annotated with the
* @Category(IntegrationTestCategory.class)
category are
* excluded.
*/
@RunWith(Categories.class)
@ExcludeCategory(IntegrationTestCategory.class)
@Suite.SuiteClasses( { UnitTests.class })
public class UnitTestSuite {
}
@RunWith(ClasspathSuite.class)
@ClasspathSuite.ClassnameFilters({ "ca.vtesc.portfolio.*Test" })
class UnitTests {
}
IntegrationTestCategory.java
/**
* A marker interface for running integration tests.
*/
public interface IntegrationTestCategory {
}
下面的第一个示例测试未使用任何类别进行注释,因此在运行UnitTestSuite时将包括其所有测试方法,并在运行IntegrationTestSuite时将其排除.
public class OptionsServiceImplTest {
@Test
public void testOptionAssignment() {
// actual test code
}
}
下一个示例在类级别上标记为Integration测试,这意味着在运行UnitTestSuite并将其包含在IntegrationTestSuite中时,将排除其测试方法:
@Category(IntegrationTestCategory.class)
public class PortfolioServiceImplTest {
@Test
public void testTransfer() {
// actual test code
}
@Test
public void testQuote() {
}
}
第三个示例演示了一个测试类,其中一个方法没有注释,另一个标记为Integration类.
public class MarginServiceImplTest {
@Test
public void testPayment() {
}
@Test
@Category(IntegrationTestCategory.class)
public void testCall() {
}
}