java - 如何在 Junit 中使用 @InjectMocks 和 @Autowired 注释

标签 java spring junit mocking mockito

我有一个 A 类,它使用 3 个不同的 Autowiring 类

public class A () {

    @Autowired
    private B b;

    @Autowired
    private C c;

    @Autowired
    private D d;
}

在测试它们时,我希望只有 2 个类(B 和 C)作为模拟,并让 D 类正常运行时 Autowiring ,此代码不适用于我:

@RunWith(MockitoJUnitRunner.class)
public class aTest () {

    @InjectMocks
    private A a;

    @Mock
    private B b;

    @Mock
    private C c;

    @Autowired
    private D d;
}

真的有可能吗?

最佳答案

应该是这样的

@RunWith(SpringJUnit4ClassRunner.class)
public class aTest () {

    @Mock
    private B b;

    @Mock
    private C c;

    @Autowired
    @InjectMocks
    private A a;

}

如果您希望 D 成为 Autowired,则无需在您的 Test 类中执行任何操作。您的 Autowired A 应该有正确的 D 实例。 此外,我认为您需要使用 SpringJUnit4ClassRunner 以使 Autowiring 正常工作,并正确设置 contextConfiguration。 因为你没有使用 MockitoJunitRunner 你需要自己初始化你的 mocks 使用

MockitoAnnotations.initMocks(java.lang.Object testClass)

关于java - 如何在 Junit 中使用 @InjectMocks 和 @Autowired 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34067956/

相关文章:

java - 我们如何从strope连接中提取rid和sid的值

java - 一对多 : Join table not found error

java - 什么是用于 Spring Boot 日志记录的默认 CONSOLE_LOG_PATTERN 以及在哪里可以找到它?

spring - 子文档中的 SD MongoDB 多态性

java - Spring REST 实现错误 404

java - Android Studio 无法解析 jUnit 4.12 依赖

java - 将本地文件传递到 Java 中的 URL

java - 如何使用 jsp 运行我的测试用例(用 junit 3.x 和 4.x 编写)?

java - 我的位置管理器的准确性有问题

java - Gradle 多项目多重依赖