我有一個有點複雜的過程,我試圖測試。 getDatesMi創建對同一個類中的方法的調用。該方法向接口方法致電 ,該方法將查詢結果轉換爲MarketLimits類型。如何模擬使用EasyMock在測試類中實例化的類?
我正在使用EasyMock和junit。
我的問題是:
- 我如何測試getSqlMapClientTemplate()queryForObject?
- 我怎麼嘲笑那個getSqlMapClientTemplate()。queryForObject的結果轉換到MarketLimits
我是新來的Java和EasyMock的,所以也許答案是obviuos但任何幫助表示讚賞。
我目前得到的NullPointerException上subDates.greaterThenOne()
接口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);
}
}
0123被測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
}
}
MyTest的
@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);
}
}
UPDATE 1
出於某種原因EasyMock的實例myServiceDao正在然而創建時的方法是
主類呼籲Ea syMock實例會返回NULL。我的解決方案是在myServiceImpl上創建一個setter方法來設置我的myServiceDao模擬。這是從Deendayal Garg
UPDATE建議2
原來我並不需要有一個setter =) 我改變了標題,以反映我面臨的真正的問題。
我更新了發生空錯誤的位置的問題 – mattwilsn