ami*_*ith 9 spring mockito spring-boot java-annotations
考虑我的情况
public class SomeClass {
@Autowired @Qualifier("converter1") private IConverter converter1;
@Autowired @Qualifier("converter2") private IConverter converter2;
public void doSomeAction(String mimeType) {
converter1.execute();
converter2.execute();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码。
为了测试这个
@RunWith(MockitoJUnitRunner.class)
public class SomeClassTest {
@Mock(name="converter1") IConverter converter1;
@Mock(name="converter2") IConverter converter2;
@InjectMocks SomeClass class = new SomeClass();
@Test
public void testGetListOfExcelConverters() throws Exception {
class.doSomeAction("abcd");
}
}
Run Code Online (Sandbox Code Playgroud)
这里没有注入模拟,请帮助使用适当的机制来模拟合格的 bean。
如果这不是使用 spring 编码的正确方法,请告诉我使用它的正确方法。
不确定您遇到什么错误,但您的测试类无法编译,因为您看起来像是打算使用关键字 成为变量名class
。这对我有用:
@RunWith(MockitoJUnitRunner.class)
public class SomeClassTest {
@Mock(name="converter1") IConverter converter1;
@Mock(name="converter2") IConverter converter2;
@InjectMocks
SomeClass clazz = new SomeClass();
@Test
public void testGetListOfExcelConverters() throws Exception {
clazz.doSomeAction("abcd");
verify(converter1).execute();
verify(converter2).execute();
}
}
Run Code Online (Sandbox Code Playgroud)
“为我工作”是指测试实际上运行并通过了。注意我添加了几个verify
语句来断言注入的模拟被调用。
我SomeClass
按原样使用了您提供的代码。
对我来说,现有的两个答案都不够。
@riddy 的回答没有考虑不同的测试用例。
@jhericks 的回答没有使用 Spring 上下文,这导致了其他问题。
这是我的解决方案:
@MockBean
@Qualifier("myNamedBean")
private SomeBean someBean;
Run Code Online (Sandbox Code Playgroud)
就如此容易。
您可以使用测试配置来模拟 bean:
@Configuration
public class TestConfig {
@Bean
public MyService myService() {
return Mockito.mock( MyService.class );
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9356 次 |
最近记录: |