我正在使用Mockito 1.9.5进行一些单元测试.我正在尝试将具体类模拟注入到具有私有接口字段的类中.这是一个例子:
我正在测试
@Component
public class Service {
@Autowired
private iHelper helper;
public void doSomething() {
helper.helpMeOut();
}
}
Run Code Online (Sandbox Code Playgroud)
我对这堂课的考试
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@Mock
private iHelper helper;
@InjectMocks
private Service service;
@Before
public void setup() {
service = new Service();
}
@Test
public void testStuff() {
doNothing().when(helper).helpMeOut();
service.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
尝试在doSomething()中调用helper.helpMeOut()时,此代码抛出NullPointerException.我调试并发现在运行测试时helper为null.我也尝试将iHelper改为具体的Helper类,同样的问题也发生了.
有什么建议?如何让Mockito正确地将模拟注入接口私有字段?
@ acdcjunior的评论帮助我弄清了这个问题.使用new关键字实例化服务导致Spring无法正确注入依赖项(在本例中为helper).我通过在测试中使用自动装配来修复此问题.我的最终工作代码如下所示:
我正在测试
@Component
public class Service {
@Autowired
private iHelper helper;
public void doSomething() {
helper.helpMeOut();
}
}
Run Code Online (Sandbox Code Playgroud)
我对这堂课的考试
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@Mock
private iHelper helper;
@InjectMocks
@Autowired
private Service service;
@Test
public void testStuff() {
doNothing().when(helper).helpMeOut();
service.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人.谢谢你的建议!
| 归档时间: |
|
| 查看次数: |
11287 次 |
| 最近记录: |