【发布时间】:2016-04-21 15:26:36
【问题描述】:
我正在尝试测试一个有点复杂的程序。 getDatesMi 调用同一类中的方法。该方法拨打电话 到返回查询结果的接口方法,该查询结果被强制转换为 MarketLimits 类型。
我正在使用 EasyMock 和 junit。
我的问题是:
- 如何测试 getSqlMapClientTemplate().queryForObject ?
- 如何模拟 getSqlMapClientTemplate().queryForObject 的结果被强制转换为 MarketLimits
我是 java 和 EasyMock 的新手,所以答案可能很明显,但我们不胜感激。
我目前在 subDates.greaterThenOne() 上遇到 NullPointerException
MyServiceDao 的接口
import com.foo.bar.domain.MarketLimits;
public interface MyServiceDao {
public MarketLimits getDates(long orgId) throws DataAccessException;
}
实现 MyServiceDao 的类
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.foo.bar.domain.MarketLimits;
public class myServiceImpl implements MyServiceDao{
@Override
public MarketLimits getDates(long orgId) throws DataAccessException {
return (MarketLimits) getSqlMapClientTemplate().queryForObject("retrieveLimits", orgId);
}
}
待测主类
import com.foo.bar.dao.MyServiceDao;
public class myServiceImpl extends reports implements myService {
@Autowired
private MyServiceDao myServiceDao;
public String getDatesMi() throws Exception {
MarketLimits subDates = getDates(23);
System.out.print(subDates); // this prints out null
if(subDates.greaterThenOne()){
// do some things
}
return "result"
}
@Override
public MarketLimits getDates(long orgId) {
return myServiceDao.getDates(orgId);
}
public setMyServiceDao(MyServiceDao myServiceDao){
this.myServiceDao = myServiceDao
}
}
我的测试
@RunWith(EasyMockRunner.class)
public class myServiceImplTest {
@org.easymock.Mock
private MyServiceDao myServiceDao;
@TestSubject
private MyServiceImpl myServiceImpl = new MyServiceImpl();
@Test
public void testGetDatesMi() throws Exception {
MarketLimits limits = new MarketLimits();
limits.greaterThenOne(true);
expect(myServiceDao.getDates()).andReturn(limits);
replay(myServiceDao);
myServiceImpl.getDatesMi(12);
}
}
更新 1
由于某种原因,正在创建 EasyMock 实例 myServiceDao,但是当在 EasyMock 实例上调用方法时,它会返回 NULL。我对此的解决方案是在 myServiceImpl 上创建一个 setter 方法来设置 myServiceDao 模拟。这是来自Deendayal Garg的建议
更新 2
原来我不需要 setter =) 我更改了标题以反映我所面临的真正问题。
【问题讨论】:
-
我用 null 错误发生的位置更新了问题
标签: java spring unit-testing junit easymock