测试类 public class Test{
@Resource(name = "testFacade")
@InjectMocks
private testFacade facade;
@Mock
private TestInf inf;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test(){
//设置inf预期的行为
when(inf.doSoming()).thenReturn("调用mock注入的bean");
//调用facade开始测试
String result = facade.facadeTest();
System.out.printpl(result);//输出 : “调用Spring的bean [@Resource注入的]” 而不是 “调用mock注入的bean”
}
}
facade的实现 public class testFacadeImpl{
@Resource(name="inf")
private TestInf inf;
public String facadeTest(){
return inf.doSoming();
}
}
inf 的实现@Service("inf")
public class TestInfImpl{ public String doSoming(){
return "调用Spring的bean [@Resource注入的]";
}
}
大体就是这样的了,全部采用注解的形式,spring+mockito+junit测试类里将inf对象mock后注入到facade中,然后在测试方法中执行facade的方法。但是现在问题是facade的inf属性没有被@Mock标签注入,而是调用了@Resource标签,用的是spring生成的bean 而不是mock的inf,输出了“调用Spring的bean [@Resource注入的]” 而不是 “调用mock注入的bean”,并且,删除@InjectMock标签对执行结果没有影响
想问一下什么情况会导致@InjectMock标签失效?已排除自动扫描注解路径错误的可能?
@Resource(name = "testFacade")
@InjectMocks
private testFacade facade;
@Mock
private TestInf inf;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test(){
//设置inf预期的行为
when(inf.doSoming()).thenReturn("调用mock注入的bean");
//调用facade开始测试
String result = facade.facadeTest();
System.out.printpl(result);//输出 : “调用Spring的bean [@Resource注入的]” 而不是 “调用mock注入的bean”
}
}
facade的实现 public class testFacadeImpl{
@Resource(name="inf")
private TestInf inf;
public String facadeTest(){
return inf.doSoming();
}
}
inf 的实现@Service("inf")
public class TestInfImpl{ public String doSoming(){
return "调用Spring的bean [@Resource注入的]";
}
}
大体就是这样的了,全部采用注解的形式,spring+mockito+junit测试类里将inf对象mock后注入到facade中,然后在测试方法中执行facade的方法。但是现在问题是facade的inf属性没有被@Mock标签注入,而是调用了@Resource标签,用的是spring生成的bean 而不是mock的inf,输出了“调用Spring的bean [@Resource注入的]” 而不是 “调用mock注入的bean”,并且,删除@InjectMock标签对执行结果没有影响
想问一下什么情况会导致@InjectMock标签失效?已排除自动扫描注解路径错误的可能?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货