2011-02-04 7 views
1

새로운 Date()를 사용하는 코드가 단위 테스트를하기가 매우 어렵다는 문제를 해결하기위한 일반적인 지식 패턴이나 관용구가 있습니까?단위 테스트의 현재 날짜 문제에 대한 패턴

나는 가능한 해결책을 알고 있지만 (예 : http://refactoringaspnet.blogspot.com/2010/02/unit-testing-code-which-is-dependent-on.html), 문제는 공통 패턴과 언어가 있는지 여부입니다.

+0

참조 http://stackoverflow.com/questions/4454106/how-can-i-mock-jodatime-actual-date – skaffman

+0

감사합니다. 그러나 이것은 또 다른 해결책 일뿐입니다. 나는 패턴을 찾고 공통 언어를 찾고 있지만, 그것은 그 자신의 방식으로 항상 그것을하고있는 것으로 보인다. 솔루션이 어렵다해도 패턴/관용구가 의사 소통에 도움이됩니다. – bertolami

답변

1

가끔 내가하는 일은 날짜를 반환하는 인터페이스를 작성하는 것입니다. 예 은 : 장치 테스트를 위해 필요한 경우

public interface ISystemClock 
{ 
    DateTime GetCurrentDate(); 
} 

이 다음 조롱 아웃 될 수있다. 내가 잘못 당신의 필요를 이해하지 않으면

+0

시도해 보았지만 문제가 있습니다. 여기 내 게시물이 있습니다, 한번보세요. http://stackoverflow.com/questions/6049777/mockito-how-to-mock-an-interface-of-jodatime –

0

, 당신은 "조롱"을 찾고 다음의 일부가 아니라 몇 가지 기본 코드에 대한 가짜 구현을 제공하는 것

테스트하지만 일부 논리를 성공적으로 테스트하려면 제대로 작동해야합니다.

+0

자바에서는 너무 사소한 것이 아니며, 모의 연습을하지 않는 것이 좋습니다. Calendar.getInstance() – bertolami

+0

.NET에서 우리는 "Moles"라고 불리는 좋은 프로젝트를 통해 모든 어셈블리에서 모든 클래스의 조롱 된 버전을 만들었습니다. (나는 자바의 "어셈블리"가 "병"이라고 생각합니다.) 그래서 사소한 일이되었습니다. 예를 들어 DateTime.Now를 사용하면 Moles가 MDateTime.Now "Mocked DateTime"을 만들고 람다 식을 설정하여 "NoW"의 기능을 변경할 수 있습니다. 어쩌면 자바는 몰 (Moles) 같은 것을 가지고있을 것인가? –

0

그게 전부입니다. 당신은 시간의 독서를 조롱하거나 위조해야 할 것입니다. 이는 시스템 시간 이상으로 확장 될 수 있습니다. 테스트를 위해 다른 비 결정적 요소를 제어 할 수있는 일반적인 "환경"인터페이스를 가질 수 있습니다.

0

인터페이스 뒤에있는 테스트하기 어려운 (즉, 단위 테스트의 목적으로 제어하기 어려운) 것을 이동하는 것이 아이디어입니다. 당신에게 필요한 제어를 제공하는 가짜 또는 모의로 그걸 따라해라.

질문에 링크 된 blogpost가 대부분의 경우에 적합합니다. 그러나 개인적으로 종속성을 인스턴스화하는 TestableClock을 만드는 마지막 비트는하지 않습니다. 나는 ctor 인수 또는 메소드 매개 변수로 전달하는 것을 선호합니다.

관련 문제