【发布时间】:2016-11-25 17:55:43
【问题描述】:
我想用我专门为测试创建的该类的模拟实现替换我的 Spring Boot 应用程序中的自动装配服务类。
我选择创建这个模拟实现是因为这个类的行为过于复杂,无法使用 mockito 进行模拟,因为它本身需要多个其他模拟。
我无法弄清楚如何将这个模拟实现注入到服务中。
这是一个最小的例子:
@Service
public class ServiceIWantToTestImpl implements ServiceIWantToTest{
@Autowired
ComplicatedDependency complicatedDependency;
@Override
public void methodUsingDependency(){
String string = complicatedDependency.doSomething();
System.out.println(string);
}
}
public class MockComplicatedDependency implements ComplicatedDepencency{
public MockComplicatedDependency(...){
// Inject other mocked objects into this mock
}
public String doSomthing(){
// This would be a mocked version of this function for testing
return "test";
}
}
@RunWith(MockitoJUnitRunner.class)
public class TestingTheService(){
@InjectMock
private static ServiceIWantToTest serviceIWantToTest = new ServiceIWantToTestImpl();
@Mock
ComplicatedDependency mockComplicatedDependency;
@BeforeClass
public static void init(){
mockComplicatedDependency = new MockComplicatedDependency(...);
}
@Test
public void testAttempt(){
serviceIWantToTest.methodUsingDependency(); // This method calls complicatedDependency.doSomething() which does not run the mocked version in MockComplicatedDependency which I wanted to inject, and would always return null instead of the "test" string I put in this example.
}
}
【问题讨论】:
标签: java unit-testing junit spring-boot mockito