我需要測試一個服務類,但是當我嘗試模擬dao類時,它不會被觸發,因此無法使用ThenReturn()。爲什麼Mockito的when()被觸發?
我覺得現在的問題是我用一個接口,用於吾道和@Autowired服務類(Spring MVC的3.1):
接口:
public interface TestDao {
int createObject(Test test) throws NamingException;
}
實施:
@Repository
public class TestDaoImpl implements TestDao {
@Override
public int createObject(Test test) {
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new InsertNewTest(test), keyHolder);
return ((java.math.BigDecimal)keyHolder.getKey()).intValue();
}
}
服務:
public class RegTest {
@Autowired
TestDao testDao;
public int regTest(int .....) {
.
.
int cabotageId = testDao.createObject(test);
}
}
在測試我有:
@RunWith(MockitoJUnitRunner.class)
public class TestRegService {
@InjectMocks
private RegTest regTest = new RegTest();
@Mock
TestDao testDao;
@Test()
public void test() {
.
when(testDao.createObject(null)).thenReturn(100);
.
}
testDao.createObject(空)返回0(由於被mock'ed),而不是100我正在努力實現。
有人可以幫忙嗎?
問題解決了!
這是通過測試對象createObject(),不匹配。使用
testDao.createObject(any(Test.class))
做了詭計!
我試圖重現你的問題,但是當我做到這一點時,我得到了合適的返回值。你如何檢查createObject的結果?你可以在'when'調用之後,簡單地'System.out.println(testDao.createObject(null))'看看它說了什麼。如果它說100,那麼你知道問題是與測試,而不是模擬。如果它表示0,那麼它是Mockito的一種錯誤。 – jhericks 2012-04-09 16:59:59
嗯...它說0 :-(我會嘗試其他建議之前,我報告它作爲一個bug ... – mamruoc 2012-04-09 19:08:55