使用嘲讽为的Mockito弹簧启动应用程序
问题描述:
合格豆考虑我的情况使用嘲讽为的Mockito弹簧启动应用程序
public class SomeClass {
@Autowired @Qualifier("converter1") private IConverter converter1;
@Autowired @Qualifier("converter2") private IConverter converter2;
public void doSomeAction(String mimeType) {
converter1.execute();
converter2.execute();
}
}
这是我的代码。
为了测试这个
@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");
}
}
这里嘲笑没有得到注入,请与嘲讽一个合格的豆适当的机制帮助。
如果这不是使用spring编写代码的正确方法,请让我知道使用此方法的正确方法。
答
您可以使用测试配置嘲笑豆:
@Configuration
public class TestConfig {
@Bean
public MyService myService() {
return Mockito.mock(MyService.class);
}
}
答
不知道你做了什么错误,但您的测试类没有编译,因为你有什么样子你打算要使用一个变量名关键字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();
}
}
而“为我工作”,我的意思是测试实际上运行并通过。注意我添加了一些verify
声明来声明注入的模拟被调用。
我使用了您提供的SomeClass
代码。
并查看https://tedvinke.wordpress.com/2014/02/13/mockito-why-you-should-not-use-injectmocks-annotation-to-autowire-fields/关于如何使用InjectMocks以及为什么你不应该^^ – riddy
感谢您的链接,它真的很有帮助。我将从我的项目中删除注入。第二,如何在测试类中指定配置类,如果可能的话可以提供一些例如。 – amith
很简单,如果测试文件夹中的配置类的包名称与src文件夹中的包名称匹配,它将自动完成。 – riddy