새로운 Date()를 사용하는 코드가 단위 테스트를하기가 매우 어렵다는 문제를 해결하기위한 일반적인 지식 패턴이나 관용구가 있습니까?단위 테스트의 현재 날짜 문제에 대한 패턴
나는 가능한 해결책을 알고 있지만 (예 : http://refactoringaspnet.blogspot.com/2010/02/unit-testing-code-which-is-dependent-on.html), 문제는 공통 패턴과 언어가 있는지 여부입니다.
새로운 Date()를 사용하는 코드가 단위 테스트를하기가 매우 어렵다는 문제를 해결하기위한 일반적인 지식 패턴이나 관용구가 있습니까?단위 테스트의 현재 날짜 문제에 대한 패턴
나는 가능한 해결책을 알고 있지만 (예 : http://refactoringaspnet.blogspot.com/2010/02/unit-testing-code-which-is-dependent-on.html), 문제는 공통 패턴과 언어가 있는지 여부입니다.
가끔 내가하는 일은 날짜를 반환하는 인터페이스를 작성하는 것입니다. 예 은 : 장치 테스트를 위해 필요한 경우
public interface ISystemClock
{
DateTime GetCurrentDate();
}
이 다음 조롱 아웃 될 수있다. 내가 잘못 당신의 필요를 이해하지 않으면
시도해 보았지만 문제가 있습니다. 여기 내 게시물이 있습니다, 한번보세요. http://stackoverflow.com/questions/6049777/mockito-how-to-mock-an-interface-of-jodatime –
, 당신은 "조롱"을 찾고 다음의 일부가 아니라 몇 가지 기본 코드에 대한 가짜 구현을 제공하는 것
테스트하지만 일부 논리를 성공적으로 테스트하려면 제대로 작동해야합니다.
자바에서는 너무 사소한 것이 아니며, 모의 연습을하지 않는 것이 좋습니다. Calendar.getInstance() – bertolami
.NET에서 우리는 "Moles"라고 불리는 좋은 프로젝트를 통해 모든 어셈블리에서 모든 클래스의 조롱 된 버전을 만들었습니다. (나는 자바의 "어셈블리"가 "병"이라고 생각합니다.) 그래서 사소한 일이되었습니다. 예를 들어 DateTime.Now를 사용하면 Moles가 MDateTime.Now "Mocked DateTime"을 만들고 람다 식을 설정하여 "NoW"의 기능을 변경할 수 있습니다. 어쩌면 자바는 몰 (Moles) 같은 것을 가지고있을 것인가? –
그게 전부입니다. 당신은 시간의 독서를 조롱하거나 위조해야 할 것입니다. 이는 시스템 시간 이상으로 확장 될 수 있습니다. 테스트를 위해 다른 비 결정적 요소를 제어 할 수있는 일반적인 "환경"인터페이스를 가질 수 있습니다.
인터페이스 뒤에있는 테스트하기 어려운 (즉, 단위 테스트의 목적으로 제어하기 어려운) 것을 이동하는 것이 아이디어입니다. 당신에게 필요한 제어를 제공하는 가짜 또는 모의로 그걸 따라해라.
질문에 링크 된 blogpost가 대부분의 경우에 적합합니다. 그러나 개인적으로 종속성을 인스턴스화하는 TestableClock을 만드는 마지막 비트는하지 않습니다. 나는 ctor 인수 또는 메소드 매개 변수로 전달하는 것을 선호합니다.
참조 http://stackoverflow.com/questions/4454106/how-can-i-mock-jodatime-actual-date – skaffman
감사합니다. 그러나 이것은 또 다른 해결책 일뿐입니다. 나는 패턴을 찾고 공통 언어를 찾고 있지만, 그것은 그 자신의 방식으로 항상 그것을하고있는 것으로 보인다. 솔루션이 어렵다해도 패턴/관용구가 의사 소통에 도움이됩니다. – bertolami