我正在为具有 2 级依赖注入(inject)的类编写测试用例。我对 1 级依赖注入(inject)对象使用 @Spy 注释,我想模拟第 2 级注入(inject)。但是,我在第二级不断收到空指针异常。有什么方法可以将模拟注入(inject)@Spy 对象?
public class CarTestCase{
@Mock
private Configuration configuration;
@Spy
private Engine engine;
@InjectMocks
private Car car;
@Test
public void test(){
Mockito.when(configuration.getProperties("")).return("Something");
car.drive();
}
}
public class Car{
@Inject
private Engine engine;
public void drive(){
engine.start();
}
}
public class Engine{
@Inject
private Configuration configuration;
public void start(){
configuration.getProperties(); // null pointer exception
}
}
最佳答案
我也徘徊过如何将模拟注入(inject) spy 。
以下方法将不起作用:
@Spy
@InjectMocks
private MySpy spy;
但是,当同时使用注释和手动模拟时,可以通过“混合”方法实现所需的行为。以下工作完美:
@Mock
private NeedToBeMocked needToBeMocked;
@InjectMocks
private MySpy mySpy;
@InjectMocks
private SubjectUnderTest sut;
@BeforeMethod
public void setUp() {
mySpy = Mockito.spy(new MySpy());
MockitoAnnotations.initMocks(this);
}
(这里的SubjectUnderTest
依赖于MySpy
,而MySpy
又依赖于NeedToBeMocked
)。
UPD: 就个人而言,我认为如果你不得不经常做这样的魔法,这可能表明你的类之间的依赖关系有问题,值得执行一个进行一些重构以改进您的代码。
关于java - Mockito 将模拟注入(inject) Spy 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43926636/