コンストラクターを介してメンバーが注入され、セッターを介してOTHERSが注入されるクラスがあります。Mockitoにセッターを注入させることができないようです。コンストラクターによって注入されたものは正常にモックされますが、セッターのものはnullとして返されます。setter-edメンバーをコンストラクター注入に切り替えたとき、すべてが順調です。元の製品コードは次のとおりです。
@Autowired
private BetRepository betRepository;
public void setBetRepository(BetRepository betRepository) {
this.betRepository = betRepository;
}
public TournamentScoringCache(TournamentScoringCacheInitializer cacheInitializer,
ScoringEngineInitializer scoringEngineInitializer) {
tournamentUserStates = cacheInitializer.initCache();
scoringEngines = scoringEngineInitializer.initEngines();
}
public <T extends SideScore> void updateGameScore(Long tournamentId, Long gameId, MatchScore<T> score) {
Map<Long, UserTournamentState> userStates = tournamentUserStates.get(tournamentId);
ScoringEngine<?> scoringEngine = scoringEngines.get(tournamentId);
List<Bet> bets = betRepository.getBetsByGameId(gameId); //HERE IS WHERE I GET THE NPE
....
}
テストコード:
@Mock
BetRepository betRepository;
@Mock
TournamentScoringCacheInitializer cacheInitializer;
@Mock
ScoringEngineInitializer engineInitializer;
@InjectMocks
private TournamentScoringCacheAndDB tournamentScoringCache;
@Test
public void testUpdateGameScore() {
....
when(cacheInitializer.initCache()).thenReturn(utss);
when(betRepository.getBetsByGameId(1L)).thenReturn(createBets());
when(engineInitializer.initEngines()).thenReturn(createEngines());
when(engine.getBetScore(bet1, score)).thenReturn(betScore);
when(engine.getBetScore(bet2, score)).thenReturn(betScore2);
tournamentScoringCache.updateGameScore(tournamentId, gameId, score);
....
}
何か案は?
ありがとう!