【发布时间】:2020-01-08 16:20:44
【问题描述】:
在我的@RestController 中,我正在注入一个@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.repositories 是 null
我做错了什么或者这在单元测试中是不可能的? 提前致谢!
【问题讨论】:
-
构造函数参数需要一个映射而不是直接存储库,因此您可以尝试使用模拟创建映射并手动创建对象 =
DatasetController datasetController = new DatasetController(yourMapContainingMocks) -
DatasetController的优点在于它有一个构造函数。因此,您可以在测试中手动构建它,而不是尝试使用自动配置。 -
@EamonScullion 在实际应用中我从不提供/构建此地图。它是由java依赖注入自动创建的。 String 是 Classname,DataBaseRepository 是该 Classname 的适当存储库。为什么它在 Application 中有效,而在 Tests 中无效?
标签: java spring junit dependency-injection