我正在尝试通过 spring bean 配置设置模拟对象(使用 Mockito
),但是我不知道如何为该对象设置 MockSettings
。特别是我想设置对象可序列化。
以编程方式可以通过以下方式实现:
Object serializableMock = mock(Object.class, withSettings().serializable());
<bean id="object" name="object" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="object" />
<constructor-arg value="org.mockito.MockSettings"> ??? </constructor-arg>
</bean>
有人可以指导我该怎么做吗?提前致谢
顺便说一句:我想使用纯 XML 配置。
最佳答案
只能通过 XML,您不能。
实际上我不建议你像往常一样在 Spring 中使用 Mockito 模拟进行测试。原因如下:
通常在单元测试时,你想单独测试一个类,毕竟这是单元测试,所以 Spring DI 根本没有必要这个案例。您只需自己或通过方便的
@InjectMock
注入(inject)测试对象的合作者即可。注释。但是,如果您需要使用另一个系统(例如带有数据库的 DAO)来测试事物,那么实际上您可能需要 Spring 连接来连接到真实数据库或某些内存数据库(例如 H2)。但在本例中,您正在制作集成测试。在这种情况下,您很可能不需要模拟。
也就是说,您可能有特定的需求,并且上述观点可能与您的特定有界上下文无关。但话又说回来,在我看来,如果它是具体的,我认为自己制作一个简单的 MockSettings factory bean 并不算矫枉过正。 (甚至可以配置)。
例如您可以在应用程序的技术模块中一劳永逸地编写此代码:
public class SpringMockSettingsFactoryBean extends AbstractFactoryBean<MockSettings> {
@Override public Class<Multimap> getObjectType() {
return MockSettings.class;
}
@Override protected Multimap<String, String> createInstance() throws Exception {
// ... your code
return mockSettings;
}
}
有一个项目springockito在 bitbucket 上尝试在 spring 中拥有一个以mockito为中心的命名空间。我认为该项目无法做到这一点,但框架的作者可能有兴趣实现该功能。
希望有帮助。
关于java - Mockito - 带 Spring 的 MockSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9325177/