我需要测试一个服务类,但是当我尝试模拟 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) 返回 0(由于被模拟)而不是 100,因为我试图实现。
有人可以帮忙吗?
问题解决了!
传递给 createObject() 的测试对象不匹配。使用
testDao.createObject(any(Test.class))
成功了!