由于弹簧注入导致Junit方法调用失败

时间:2016-05-16 17:13:00

标签: java spring tomcat junit dependency-injection

我编写了Junit测试类来测试特定方法。在此方法中处理的变量之一是通过从属性文件中获取值来弹簧注入。

以下是我的测试方法

@Test 
public void myTestMethod() {
  //invoking the method to be tested
  Assert.assertTrue(updateGroceries());
}

这是要测试的课程,

   public class ToBeTested {

   //Spring injected value
   String categories;

   public boolean updateGroceries() {
   List<String> categoryList = StringUtils.convertStringToList(categories);
   }

在上面的类中,categories变量是spring注入的。 这是属性文件内容:

categories = Dals,Pulses,Dry Fruits,Edible Oil

现在在运行我的Junit方法时,执行失败,因为依赖注入失败。因为我要测试的代码在tomcat上运行。我想在不运行tomcat的情况下测试代码。请提出一些解决方案。

2 个答案:

答案 0 :(得分:1)

首先要运行mockito,你需要在测试中启用它。 使用注释@RunWith(MockitoJunitRunner.class)或在测试开始时执行Mockito.initMocks()。 那么你的测试应该是这样的:

@RunWith(MockitoJunitRunner.class)
private YourTest{

   @InjectMocks
   ToBeTested toBeTested;

   @Mock
   ToBeTestedDependency dependency;

   @Before
   public void setUp(){
      ReflectionTestUtils.setField(toBeTested, "categories",
            "someCategory");
   }

   @Test
   public void shouldDoThisOrThat(){
      toBeTested.updateCategories();
  }
}

不幸的是,mockito不支持注入@Value注释字段。您需要使用ReflectionTestUtils或使用SpringJUnit4ClassRunner设置运行测试,您需要使用PropertyPlaceholder配置定义弹簧上下文,以解析您拥有Value密钥的属性。在那里你可以找到documentation and example弹簧测试方法的参考。

希望这会有所帮助。

答案 1 :(得分:0)

你应该看看Mockito。使用mockito框架时,可以为弹簧注入值创建模拟。您应该阅读有关mockito website的更多信息。