如何创建 "deep" 模拟 spring bean?
How to create "deep" mock of a spring bean?
我有一个spring这样的豆子
@Component
public class Service extends AbstractService {
@Autowired
private OtherService otherService;
}
为了测试,我使用服务模拟创建了一个测试上下文
<bean id="serviceMock" class="org.easymock.EasyMock" factory-method="createMock" primary="true">
<constructor-arg index="0" type="java.lang.Class" value="com.pkg.my.Service"/>
</bean>
模拟仍然需要我模拟所有自动装配的依赖项。有没有办法只创建 "dumb" 模拟而不需要为所有依赖项创建 bean?
您的单元测试需要 DI 吗?
我更喜欢 setter 注入,因为这样你就不需要初始化 Spring 框架。例如:
@Component
public class Service extends AbstractService {
private OtherService otherService;
@Autowired
public void setOtherService(OtherService otherService){...}
}
然后在你的测试中 class:
public class ServiceTest {
private Service service;
private OtherService otherServiceMock;
@Before
public void setUp() {
otherServiceMock= mock(OtherService.class);
service = new Service();
service.setOtherService(otherServiceMock);
}
@Test
public void testSomeMethodBlaBla(){...}
}
我有一个spring这样的豆子
@Component
public class Service extends AbstractService {
@Autowired
private OtherService otherService;
}
为了测试,我使用服务模拟创建了一个测试上下文
<bean id="serviceMock" class="org.easymock.EasyMock" factory-method="createMock" primary="true">
<constructor-arg index="0" type="java.lang.Class" value="com.pkg.my.Service"/>
</bean>
模拟仍然需要我模拟所有自动装配的依赖项。有没有办法只创建 "dumb" 模拟而不需要为所有依赖项创建 bean?
您的单元测试需要 DI 吗?
我更喜欢 setter 注入,因为这样你就不需要初始化 Spring 框架。例如:
@Component
public class Service extends AbstractService {
private OtherService otherService;
@Autowired
public void setOtherService(OtherService otherService){...}
}
然后在你的测试中 class:
public class ServiceTest {
private Service service;
private OtherService otherServiceMock;
@Before
public void setUp() {
otherServiceMock= mock(OtherService.class);
service = new Service();
service.setOtherService(otherServiceMock);
}
@Test
public void testSomeMethodBlaBla(){...}
}