2014-12-11 2 views
0

저는 UserService 클래스 안에있는 메소드 (passwordComplexityCheck)를 조롱하려했습니다. 다음은Grails의 서비스 클래스 안에서 간단한 메소드를 조롱했습니다.

내가 내 테스트 클래스

def userService 
controller.userService=new UserService() 

controller.userService=[passwordComplexityCheck:{def k-> 
    return true 
}] 

에 조롱 위해 한하지만이 작동하지 않는 것입니다.

다음은 UserService 클래스 및 메서드입니다.

class UserService { 
    //required declaration 
    ........ 
    public boolean passwordComplexityCheck(String password) { 

     log.debug("Enter(Method) - passwordComplexityCheck()") 

     if (password != null && password.trim() != "") { 
     if (password.length() < grailsApplication.config.user.password.min.length) { 
      return false 
     } 
     if (password == password.toLowerCase()) { 
      return false 
     } 
     if (password == password.toUpperCase()) { 
      return false 
     } 
     if (password.grep(~/\d+/).size == 0) { 
      return false 
     } 
     } else { 
     return false 
     } 
     return true 
    } 
} 

나는 true 또는 false를 반환 할 수있는 방식으로 조롱해야합니다. 메서드에 인수가 있으므로 조롱은 달라질 수 있습니까? 서비스에서 메소드를 조롱하는 일반적인 방법은 무엇입니까?

+0

이 작동하지 않습니다? 오류가 있습니까? 또는 당신이 기대하는 행동을 얻지 못하고 있습니까? 어떤 예외 또는 동작을 알면 문제를 추적하는 데 도움이됩니다. – David

+0

안녕하세요, 혼란에 드려 죄송합니다. UserService 클래스의 로그로 인해 오류가 발생했습니다. 로그를 서비스 클래스로 조롱하는 방법을 조언 해 주실 수 있습니까? –

+0

log.debug ("Enter (Method) - passwordComplexityCheck()") –

답변

1

Grails에서 내장 된 로깅이 테스트 중에 작동하기 때문에 로깅 기능을 모방해야합니다. 이렇게하려면 아래 코드를 테스트 클래스에 포함 시키십시오. 코드를 호출하기 전에 setUp() 메서드를 사용하는 것이 가장 좋습니다.

mockLogging(UserService, true)

참조 : 어떤 방법으로 http://grails.org/doc/latest/api/grails/test/GrailsUnitTestCase.html#mockLogging%28java.lang.Class,%20boolean%29

+1

고맙습니다 !! 근무했습니다 –

+0

내 설정 파일에 – David

+0

이 들리니 기쁘다. "user.password.min.length = 6"이라는 값을 가지고 있는데, "mockConfig (user.password.min.length)"라고 조롱했다. 그러나 이것은 널 포인터 예외를 보여줍니다. 이 값은 코드에서 grailsApplication.config.user.password.min.length로 취했습니다. 어떤 생각? –