正しいデータを db に挿入できることをテストしたいと思います。そのために、サービス層にモックを使用します。テスト作業を正しく書く方法を知っています。データを選択するすべての方法で、正しい結果が得られます。しかし、データを挿入して最後に挿入されたレコード ID を返そうとすると、0 が返されます。
public class SeasonServiceImplTest extends BaseServiceTest {
private static final String SEASON_NAME = "2012-2013";
private SeasonServiceImpl seasonService;
private SeasonDao seasonDao;
private LanguageDao languageDao;
public SeasonServiceImplTest() {
}
@Before
@Override
public void setUp() throws Exception {
super.setUp();
seasonService = createService(SeasonServiceImpl.class);
seasonDao = mock(SeasonDao.class);
when(getDap().getDao(SeasonDao.class)).thenReturn(seasonDao);
languageDao = mock(LanguageDao.class);
when(getDap().getDao(LanguageDao.class)).thenReturn(languageDao);
}
private SeasonBean createSeasonBean(){
SeasonBean seasonBean = new SeasonBean();
Long langId = 1L;
seasonBean.setId(langId);
seasonBean.setSeason(SEASON_NAME);
Map<Long, String> seasonNames = new HashMap<>();
seasonNames.put(langId, SEASON_NAME);
seasonBean.setSeasons(seasonNames);
seasonBean.setBeach(true);
return seasonBean;
}
@Test
public void testAddSeason() throws TechnicalException, LogicalException {
Long idAddedSeason = seasonService.addSeason(createSeasonBean());
SeasonBean selectedSeasonBean = seasonService.getSeasonById(idAddedSeason);
assertNotNull("Season wasn't added", selectedSeasonBean);
}
}
そしてDAOに挿入
//addSeason in DAO layer
@Override
public Long insert(T entity) {
getSession().save(entity);
return (Long) getSession().getIdentifier(entity);
}
最後に挿入されたレコード ID が 0 になるのはなぜですか?