PowerMockitoユニットテスト(1)-主な考え方と通常の異常カバー
12036 ワード
1.主な操作手順をテストする:
【テストする方法】:
@Component
public class UserDao{
@Autowired
private UserMapper userMapper
@Autowired
private SystemErrorRecoder systemErrorRecoder
public List<UserDTO> getUsers(String userName){
List<UserDTO> userDtos = null;
try{
userDtos = userMapper.getUsers(userName);
}catch(DataAccessException e){
systemErrorRecoder.addMsgError(e.getMessage());
}
if(CollectionUtils.isEmpty(userDtos)){
return new ArrayList();
}
return userDtos;
}
}
【試験方法】:
@RunWith(PowerMockRunner.class) // , PowerMock
@PowerMockIgnore("javax.management.*")// previously initiated loading for different type with name "javax/managemen
public class UserDaoTest[
private UserDao userDao;
private UserMapper userMappers;
private SystemErrorRecoder systemErrorRecoder;
@Before// @Test ,
public void setUp(){
userDao = new UserDao();
userMappers = PowerMockito.mock(UserMapper.class);//mock UserMapper
systemErrorRecoder = PowerMockito.mock(SystemErrorRecoder.class);
Whitebox.setInternalState(userDao,"userMapper",userMappers);// userDao userMapper userMappers
Whitebox.setInternalState(userDao,"systemErrorRecoder",systemErrorRecoder);
}
@Test
public void testGetUsers(){
List<UserDTO> userDtos = new ArrayList<>();
userDtos.add(new UserDTO);
userDtos.add(new UserDTO);
PowerMockito.when(userMappers.getUsers("test").thenReturn(userDtos);
Assert.assertEuqals(userDtos,userDao.getUsers("test"))
// Catch ( )
//a.
DataAccessException exception = PowerMockito.mock(DataAccessException.class);
//b. try ,doThrow
PowerMockito.doThrow(exception).when(userMappers).getUsers("test")
//c. catch ( catch , )
PowerMockito.doNothing().when(systemErrorRecoder).addMsgError(Mockito.anyString())
//d.
Assert.assertTure(CollectionUtils.isEmpty(userDao.getUsers("test")))
【異常オーバーライド】:
上記のようにdoThrowで上書きし、catch以外のコードをテストしてから異常なコードをテストします.そうしないとtest should never throw an exception to this levelと報告される可能性があります.
【主な考え方】:
①. 新試験方法クラスオブジェクトが真のオブジェクトであるuserDaoが真のオブジェクトである場合,その属性userMapperも真の属性である.
②. mockで出てくるオブジェクトはエージェントオブジェクト、すなわちuserMappersはエージェントオブジェクト
③. エージェントオブジェクトをリアルオブジェクトのプロパティにマップする:Whitebox.setInternalState
④. PowerMockitoでエージェントオブジェクトが何をするか、何を返すかを期待します.たとえば、PowerMockito.when(userMappers.getUsers(“test”).thenReturn(userDtos); ユーザマップはgetUsersメソッドを実行し、所望のユーザDtosオブジェクトにどのようにアクセスするかを期待する
⑤. 実際のオブジェクトが同じメソッドをトリガすると、実際に実行されるときにエージェントオブジェクトのメソッドがエージェントされます.エージェントオブジェクト実行方法の所望の戻り値、すなわち期待値.実オブジェクトがメソッドを実行する後の戻り値、すなわち実値getUsersメソッドの場合、期待値と真実値が一致しているかどうかを判断することで、テストメソッドが正しいかどうかを知ることができます.