在我的@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;

    ...
}


在我的测试中,this.repositories中的DatasetController为空

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

最佳答案

您可以使用@Before创建您的控制器,然后让模仿为您注入模拟。

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

07-24 20:17