2011-09-12 7 views
2

현재 날짜를 가져 오는 도우미 클래스가 필요합니다. 나중에 테스트 문제 (시스템 시간보다 다른 시간을 반환해야 할 수도 있음)로 인해 코드에 new Date()이 발생하지 않도록하고 JodaTime을 사용하여 테스트 문제를 방지 할 수 없습니다.java.util.Date의 모의 헬퍼 클래스

public interface DateHelper { 

    /** 
    * Returns the current date. 
    */ 
    Date now(); 

} 

을하지만 어떻게 클라이언트에이 인터페이스의 모의 객체를 제공 할 수 있습니다 :

이 같은 도우미의 생각?

public ClientOfDateHelper { 

    private DateHelper dateHelper; 

    // no-arg constructor that instantiates a standard implementation of DateHelper 
    public ClientOfDateHelper() { 
     this.dateHelper = new DefaultDateHelper(); 
    } 

    // constructor that can be used to pass mock to the client 
    public ClientOfDateHelper(DateHelper suppliedDateHelper) { 
     this.dateHelper = suppliedDateHelper; 
    } 

    public void foo() { 
     Date today = dateHelper.now(); 
     // do some work that requires today's date 
    } 

} 

이 DateHelper을 사용하는 적은 코드를 필요로하는 더 우아한 해결책은 있는가, 아직 모의 객체를 사용 할 수 있습니다 : 내가 생각할 수있는 유일한 해결책이 무엇입니까?

+1

종속성 삽입 또는 종속성 조회 (클라이언트가 일부 중앙 서비스/클래스의 날짜 도우미를 요청)는 어떻게됩니까? – Thomas

답변

0

테스트의 용이성은 종속성 삽입의 이점 중 하나입니다. Spring과 같은 프레임 워크를 사용하면 종속성을 외부 적으로 구성 할 수 있습니다. 따라서 구현은 스프링 구성으로 실행되며 단위 테스트는 생성자 또는 속성 설정자를 통해 제공하는 모의 객체를 사용하여 실행됩니다. 이것은 위의 두 constuctors에 대한 필요성을 제거합니다, 당신은 DateHelper를 받아들이는 것을 사용합니다.

관련 문제