java - 如何创建 "deep"模拟 spring bean?

标签 java spring unit-testing junit easymock

我有一个这样的 Spring Bean

@Component
public class Service extends AbstractService {
        @Autowired
        private OtherService otherService;
}

为了测试,我用 Service mock 创建了一个测试上下文

<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>

模拟仍然需要我模拟所有 Autowiring 的依赖项。有没有办法只创建“哑”模拟而不需要为所有依赖项创建 bean?

最佳答案

您的单元测试需要依赖注入(inject)吗?

我更喜欢 setter 注入(inject),因为这样你就不需要初始化 Spring Framework。例如:

@Component
public class Service extends AbstractService {
    private OtherService otherService;

    @Autowired
    public void setOtherService(OtherService otherService){...}
}

然后在你的测试类上:

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(){...}
}

关于java - 如何创建 "deep"模拟 spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32968692/

相关文章:

java - 在Android中使用Zxing扫描仪如何读取UPI QR码?

Java动态地将参数包装到对象中?

c# - 覆盖 Autofixture 自定义设置

java - 如何绘制纹理并使用VBO?

java - 单击按钮时同时播放不同的声音

java - 为什么 Eclipse 不编译我的 Web 应用程序?

android - 模拟对象仍在调用方法(Mockito + Kotlin)

unit-testing - Angularjs - 如何用模拟正确替换服务依赖

java - 如何克隆 java keystore 实例?

spring - 更改 Spring Cloud Config 的路径