Junit 4 + Eclipse - 使用SpringJUnit4ClassRunner运行内部类测试用例

时间:2015-06-28 14:07:12

标签: eclipse spring unit-testing junit4

我需要使用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();
    .....
   }
  }
} 


}

1 个答案:

答案 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类中声明所有依赖项,在这种情况下,抽象超类中没有必要。