クラスを単体テストし、DAO をモックして予測可能な結果を提供しようとしています。それでも、休止状態エラーを受け取ると、DAO のメソッドがまだ呼び出されているように見えます。
org.hibernate.exception.GenericJDBCException: ステーション TST が見つかりません。
このエラーは、データベースに TST が含まれていないことが原因ですが、DAO をモックしたため、これを呼び出すべきではありませんか? データベースがヒットしないように呼び出しをモックするにはどうすればよいですか。
モックを設定する方法は次のとおりです
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class MyServiceTest{
@Autowired
private MyService service;
private MyDAO dao;
private LinkedList objs;
@Before
public void init() throws SecurityException, NoSuchFieldException,
IllegalArgumentException, IllegalAccessException {
// mock the dao for predictable results
dao = mock(MyDAO.class);
when(dao.myDBCall(anyString(), any(Date.class))).thenReturn(legs);
Field f = MyService.class.getDeclaredField("dao");
f.setAccessible(true);
f.set(service, dao);
}
@Test
public void testCall() {
// construct our sample leg data
legs = new LinkedList();
//fill in my stub data i want to return
Collections.shuffle(legs);
List results = service.testingCall("TST", new Date()); // this fails because service is using the dao, but it is making a call to the DB with this garbage 'Test' param rather than just returning 'legs' as stated in my when clause
assertThat(results, not(nullValue()));
}
@Test
public void testGetGates() {
// fail("Not yet implemented");
}
@Test
public void testGetStations() {
// fail("Not yet implemented");
}
}