2017-12-27 46 views
0

유닛 테스트를 할 때 EasyMock Capture를 사용해야하는 경우에는 어떤 것이 있는지 잘 모르겠습니다. 웹 사이트에서 일부 자료를 읽었지만 이해가 정확한지 확신 할 수 없습니다.어떤 경우 EasyMock과 함께 Unit Test의 객체보다는 Capture를 사용해야합니까?

public class UserService { 

    private UserDao userDao; 

    public boolean register() { 

     User user = new User(); 
     user.type = "VIP"; 

     return userDao.insertUser(user); 
    } 
} 

public class UserServiceTest { 

    public void testRegister { 

     UserDao userDao = createMock(UserDao.class); 
     Capture<User> captureUser = new Capture<>(); 

     expect(userDao.insertUser(capture(captureUser))) 
      .andReturn(true); 
     replay(userDao); 

     userService.setUserDao(userDao); 
     userService.register(); 

     verify(userDao); 
    } 
} 
  1. 가 I이 경우 캡처를 사용해야 :

    예를 들면 이하의 코드 사용에 대한 사용자 객체를 등록() 메소드 내부에 생성되기 때문에, 그것을 userDao의 인수 인 .insertUser (사용자). 그래서 캡쳐를 사용해야합니까?

  2. 는 뜻이다 : 나는() testTargetClass.testTargetMethod을 테스트 할 때. testTargetMethod() 안에 또 다른 서비스 호출이 있고 그 인수가 testTargetMethod() 내부에서 작성된 경우, 인수에 대해 Capture를 사용해야합니까?

  3. 나는 그것을 테스트 코드 아래에 사용할 수 있을까요?

    공공 무효 testRegister {

    UserDao userDao = createMock(UserDao.class); 
    
    User mockUser = new User(); 
    mockUser.setType = "VIP"; 
    
    expect(userDao.insertUser(mockUser)).andReturn(true); 
    replay(userDao); 
    
    userService.setUserDao(userDao); 
    userService.register(); 
    
    verify(userDao); 
    

    } 사전에

감사합니다!

답변

0

매개 변수를 확인하려면 두 가지 옵션이 있습니다.

  1. 는 정규 표현을 사용합니다. 매개 변수 (등등 테스트 정체성, 평등과 같은) 쉽게 테스트 할 때처럼 userDao.insertUser(same(user))
  2. 이 캡처

를 사용하여 정규 완벽하게 작동하며 선호한다.

매개 변수 테스트가 어려울 때. 예를 들어 여러 속성을 검사하고 싶다면 캡처로 훨씬 쉽게 만들 수 있습니다. 당신은 할 것

User user = capturedUser.getValue(); 
assertEquals("name", user.getName()); 
assertEquals(16, user.getAge()); 
0

귀하의 이해는 다소 정확합니다. 추가 할 유일한 것은 위의 두 테스트 모두 test_function을 테스트하는 데 사용할 수 있지만 내부 서비스/함수 호출이 있고 값을 확인하고 함수에 전달 된 인수의 클래스 유형을 확인하기를 원한다는 것입니다 , 캡처/인수 캡처가 사용됩니다. 사용할 때

그래서, 당신의 예에서 : 캡처 (사용자), 당신은 또한 사용자 개체의 값을 검사 할 것입니다.