2014-10-29 3 views
0

클래스의 프로세스 메소드를 조롱하고 개인 메소드 readContentisValidFileuserService 클래스를 테스트하려고합니다.jmockit에서 테스트중인 클래스의 모의 개인 메소드

@Named("processServiceImpl") 
public class ProcessServiceImpl { 

    @Inject 
    private UserService userService; 

    public User process(Long userId, File inputFile) throws InvalidFileException { 
     User user = userService.load(userId); 
     String fileContent = readContent(inputFile); 
     if (isValidFile(fileContent)) { 
      User updatedUser = userService.updateUser(user, fileContent); 
      return updatedUser; 
     } else { 
      throw new InvalidFileException(); 
     } 
    } 

    private String readContent(File inputFile) { 
     //implementation 
    } 

    private boolean isValidFile(String fileContent) { 
     //implementation 
    } 
} 

나는 UserService을 조롱하고 성공적으로 주입했다. 그러나 나는 시험을 통해 수업의 개인적인 방법을 조롱 할 수 없다. thisthis 링크를 기반으로 나는 NonStrictExpectations으로 그들을 조롱하려고했지만 어떤 invoke 방법이 없습니다! 이것을 할 또 다른 방법이 있습니까? invoke(...) 방법은 mockit.Deencapsulation 클래스에서 있습니다

new NonStrictExpectations(processServiceImpl) {{ 
    invoke(processServiceImpl, "readContent"); 
    result = ""; 
}}; 

답변

1

(나는 jmockit-1.8을 사용하고 있습니다).

하지만 이 아닌 private 방법을 모의하지 말고을 추천합니다. 대신 테스트에 유효한 내용이 포함 된 실제 파일을 사용하십시오.

+0

이 특별한 경우에 맞습니다. 그러나 일부 클래스 (메서드 호출)에 의존하는 복잡한 개인 메서드에서 모든 종속 클래스를 조롱하는 대신 그것을 조롱하는 것이 그렇게 좋지 않다고 생각합니다. – united

관련 문제