Spring boot - вставил карту репозиториев в тесты null - PullRequest
0 голосов
/ 08 января 2020

В моем @RestController я добавляю карту @Repositories, которая простирается от DataBaseRepository. Смотрите конструктор:

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

Это работает как брелок в обычном приложении, однако это не тот случай, когда я пытаюсь создать для него модульный тест (Mocks with Mockito):

@RunWith(MockitoJUnitRunner.class)
public class DatasetControllerTest {

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

    @InjectMocks
    private DatasetController datasetController;

    ...
}

В моих тестах this.repositories в DatasetController равно null

Что я делаю неправильно или это невозможно в модульных тестах? Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы можете использовать @Before, чтобы создать свой контроллер, а затем использовать 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
}
0 голосов
/ 08 января 2020

Вы должны явно создать экземпляр DatasetController с картой DailyTAVGRepositories.

DatasetController datasetController = new DatasetController(mapWithRepositories);

Вы также можете попытаться автоматически подключить DailyTAVGRepository вместо Mocking it.

...