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;
}
그리고 여기에 내가 왜냐하면 userexecption을 던지는 방법을 테스트 할 수 있습니다 어떻게 내 테스트 코드
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);
}
}
, 당신은 usrObj 객체가 null의 경우, 그것은 왜냐하면 userexecption을 던져 볼 수 있습니다.
그것은 목적을 제공하지 않습니다하지만이 방법을 복제한다. 내 DAO의 모든 방법으로이 작업을 수행해야합니다. DAO 디자인에 문제가 있습니까? – Shankar
Dao 메소드는 데이터 제공자 일 뿐이므로 알고리즘을 너무 적게 사용하므로 Dao 메소드를 테스트하지 않는 경향이 있습니다. 저는 Dao를 호출하는 비즈니스 가치를 가진 메소드를 테스트하는 것을 선호합니다. 나는 Dao 방법을 조롱한다. –
내 모든 DAO는이 것과 거의 같습니다. DAO를 조롱하여 서비스 계층을 테스트하고 있습니다. 귀하의 솔루션은 내가 원하는 것을 달성하는 것이 맞지만 DAO 레벨에서 그 부분을 테스트 할 수 있다고 생각합니다. – Shankar