java - 更改在测试中注入(inject)的 @Component

标签 java spring testing dependency-injection

我有两个类(class)

@Component
public class A {

  @Autowired
  B b;
}

@Component
public class B {
}

它们是通过 Spring 扫描找到的。

现在我想测试 A,但我需要提供一个不同的 impl。 B,说BMock

我怎样才能让 Spring 找到不同的 B 而不是标准的(只有一个在生产中)?

我的测试注释有:

@ContextConfiguration(locations = "classpath:/test-context.xml")

在哪个文件中定义了一些实例(DAO,..),然后在我写的测试类中

@Autowired
A testInstance;

最佳答案

您不需要 Spring。这就是依赖注入(inject)的全部要点:您可以在单元测试中明确地注入(inject)任何您想要的东西。单元测试不应使用 Spring。

// constructor injection
B mockB = mock(B.class);
A aUnderTest = new A(mockB);

// setter injection
B mockB = mock(B.class);
A aUnderTest = new A();
aUnderTest.setB(mockB);

// Field injection, requiring reflection, done by Mockito
@Mock
private B mockB;

@InjectMocks
private A aUnderTest;

@Before
public void initMocks() {
    MockitoAnnotations.initMocks(this);
}

关于java - 更改在测试中注入(inject)的 @Component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522043/

相关文章:

java - 使用 Spring Security 进行 Spring Boot 2 测试

java - 为什么 Spring 在使用 Hibernate 3 时延迟关闭 Hibernate session

java - 如何在 Spring 的 Tomcat 网络服务器中外部化 application.properties?

java - Spring Boot REST 资源不显示链接对象(集)

spring - 在 Spring bean(不是 Controller )内构建 HTTP 链接

java - 关于使用 mock stripe 进行端到端测试

Python 单元测试模块差异考虑 `tzinfo=<UTC>` 和 `tzinfo=tzutc()` 不相等

Java:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

spring - 查询创建方法给出错误

oracle - 黑盒测试软件