java - Spring boot - 在测试中注入(inject)的存储库映射为空

标签 java spring junit dependency-injection

在我的@RestController中,我注入(inject)了@Repositories的映射,所有这些都从DataBaseRepository扩展。请参阅构造函数:

@Autowired
public DatasetController(Map<String, DataBaseRepository<?, ?>> reps) {
    this.repositories = reps;
}

这在正常应用程序中就像一个魅力,但是一旦我尝试为其创建单元测试(使用 Mockito 的模拟),情况就不是这样了:

@RunWith(MockitoJUnitRunner.class)
public class DatasetControllerTest {

    @Mock
    private DailyTAVGRepository dailyTAVGRepository; // This extends from DataBaseRepository

    @InjectMocks
    private DatasetController datasetController;

    ...
}

在我的测试中,DatasetController 中的 this.repositoriesnull

我做错了什么或者这在单元测试中是不可能的? 提前致谢!

最佳答案

您可以使用@Before 创建 Controller ,然后让mockito 为您注入(inject)模拟。

@Before
public void init() {
    Map<String, DataBaseRepository> repos = new HashMap<>(); //you can leave this empty or add in a bunch of mocks of your own
    datasetController = spy(new DatasetController(repos));
    MockitoAnnotations.initMocks(this);

    //add your mocked repos to the repos map as needed after mocks are initialized
}

关于java - Spring boot - 在测试中注入(inject)的存储库映射为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59649962/

相关文章:

java - 使用当前壁纸作为动态壁纸背景

java - 猜谜游戏java类的问题~

java - 如何从 LinkedHashMap 迭代器获取键值对?

java - Base64转图像文件

java - 如何在控制台中打印 Hibernate ID?

spring - Spring 4.3 如何从缓存中解包一个空的 optional 项

java - 在 Spring Boot 应用程序中启动 ApplicationContext 时出错

android - 如何在 Android 上运行 ProGuard 测试?

java - 在 Spring 测试中请求范围内的bean

java - Kotlin - Mockito 测试失败