サービス クラスをテストする必要がありますが、dao クラスをモックしようとすると、トリガーされないため、ThenReturn() を使用できません。
問題は、サービス クラス (Spring MVC 3.1) で Dao と @Autowired のインターフェイスを使用しているためだと思います。
インターフェース:
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(null) は、私が達成しようとしているように、100 ではなく 0 (モックされているため) を返します。
誰か助けてくれませんか?
問題が解決しました!
一致しなかったのは、createObject() に渡すテスト オブジェクトでした。使用する
testDao.createObject(any(Test.class))
トリックをしました!