1
我想通過模擬DAO來測試EasyMock服務層。 我的DAO類中的一種方法如下所示。EasyMock來測試異常
public BrickStreamUserVO getUserDetails(String userName, String password)
{
BrickStreamUserVO usrObj = null;
try
{
String sqlStr = "SELECT * FROM USER_T WHERE USER_NAME LIKE '" + userName + "'
AND PASSWORD = '" + password + "'";
usrObj = getJdbcTemplate().queryForObject(sqlStr, new BrickStreamUserMapper());
logger.info("Getting user details....");
if(usrObj==null)
throw new UserException("Invalid Login parameters");
}
catch (Exception e)
{
logger.error(e);
throw new UserException("Invalid Login parameters");
}
return usrObj;
}
這裏是我的測試代碼
public class BrickStreamServiceImplTest
{
private BrickStreamServiceImpl serviceImpl;
@Before
public void buildService()
{
serviceImpl = new BrickStreamServiceImpl();
}
@Test
public void testGetUserDetails()
{
BrickStreamDaoImpl daoImplMock = createMock(BrickStreamDaoImpl.class);
expect(daoImplMock.getUserDetails("user", "pwd")).
andReturn(new BrickStreamUserVO());
replay(daoImplMock);
serviceImpl.setBrickStreamDao(daoImplMock);
serviceImpl.getUserDetails("user", "pwd");
verify(daoImplMock);
}
}
如何測試扔UserException的方法,你可以看到,如果usrObj對象爲null,它拋出一個UserException。
它確實達到目的,但隨後被複制的方法。我必須使用我的DAO中的所有方法來執行此操作。我的DAO設計有問題。 – Shankar
我傾向於不測試Dao方法,因爲它們只是數據提供者,並且算法太少。 我更喜歡測試帶有商業價值的方法來調用我的Dao。然後我嘲笑Dao方法。 –
我所有的DAO都和這個一樣,我在這裏通過模擬DAO來測試服務層。您的解決方案是正確的,以達到我想要的,但我認爲它的一部分可以在DAO級別進行測試。 – Shankar