我需要使用Junit4从eclipse运行内部类测试用例。我知道有org.junit.runners.Enclosed用于此目的。它适用于" plain"单元测试,即不需要弹簧上下文配置。
对于我的情况,请在下面给出示例代码,添加另一个Enclosed注释不起作用,因为SpringJUnit4ClassRunner和Enclosed测试运行器都存在冲突。我该如何解决这个问题?
注意:请注意以下示例中的任何基本拼写错误/基本导入问题,因为我尝试从实际用例中进行烹饪。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/unit-test-context.xml"})
public class FooUnitTest {
// Mocked dependency through spring context
@Inject
protected DependentService dependentService;
public static class FooBasicScenarios extends FooUnitTest{
@Test
public void testCase1 {
.....
List<Data> data = dependentService.getData();
.....
}
}
public static class FooNeagativeScenarios extends FooUnitTest{
@Test
public void testCase1 {
.....
List<Data> data = dependentService.getData();
.....
}
}
}
}
答案 0 :(得分:-1)
FooUnitTest是一个容器,你不能将它用作超类。
您需要将所有spring-code移动到Scenario类。并使用@RunWith(Enclosed.class)。例如,使用抽象超类
@RunWith(Enclosed.class)
public class FooUnitTest {
@ContextConfiguration(locations = { "/unit-test-context.xml"})
protected abstract static class BasicTestSuit {
// Mocked dependency through spring context
@Inject
protected DependentService dependentService;
}
@RunWith(SpringJUnit4ClassRunner.class)
public static class FooBasicScenarios extends BasicTestSuit {
@Test
public void testCase1 {
.....
List<Data> data = dependentService.getData();
.....
}
}
@RunWith(SpringJUnit4ClassRunner.class)
public static class FooNeagativeScenarios extends BasicTestSuit {
@Test
public void testCase1 {
.....
List<Data> data = dependentService.getData();
.....
}
}
}
当然,您可以在每个Scenario类中声明所有依赖项,在这种情况下,抽象超类中没有必要。