2011-11-25 4 views
0

최근에 특정 시간 형식을 사용하여 현재 시간을 반환하는 getter 함수가 하나 있습니다. 그것은 일부 시스템 API를 사용하여 현재 시간을 반환하기 때문에 이에 대한 단위 테스트를 작성하는 방법을 생각할 수 없습니다.'getCurrentTime()'함수의 단위 테스트 작성 방법은 무엇입니까?

누구든지 제안 할 수 있습니까?

+0

정확히 테스트 하시겠습니까? 올바른 시간을 반환하는지 테스트하려고합니까? 아니면 시간이 올바른 형식으로 반환됩니까? –

+0

Daniel, 네, 정확한 시간에 적절한 형식인지 테스트하고 싶습니다. – zyzyis

답변

1

적어도 result가 null이 아닌지 확인할 수 있으며 두 번째 결과를 호출하면 두 번째 결과가 첫 번째 결과보다 큽니다.

+0

좋은 것들! 그것은 이것을 위해 두 가지를 더합니다. – zyzyis

+0

두 가지 시스템 호출이 빨리 수행되어 반환 된 시간이 변경되지 않는 경우 가능한 문제가 있습니다. System.getCurrentTimeMillis()에 대한 두 번의 호출을 ms보다 짧게 볼 수 있습니다. 물론, 그 사이에 Thread.sleep()에 대한 호출을 추가 할 수는 있지만 해킹처럼 느껴질 수 있습니다. – Kane

1

테스트중인 시스템에서 시스템 API를 분리해야합니다.

이 작업을 수행하는 알려진 방법은 종속성 삽입을 사용하는 것입니다. 현재 시간을 검색하는 클래스를 시간 포맷터에 삽입합니다.

단위 테스트에서 TimeFormatter의 결과를 확인할 수 있도록 미리 정의 된 값을 반환하는 Fake CurrentTime API를 삽입합니다. 프로덕션 환경에서 실행 중이면 System API를 사용합니다.

1

이상적인 솔루션은 시스템 시간을 직접 사용하지 않고 대신 모든 코드에서 System (Java라고 가정) 주위에 래퍼 (wrapper)를 사용하여 조롱 할 수 있도록하는 것입니다. 이것은 실현 가능하지 않거나 쉽지 않을 수 있습니다.

보다 간단한 방법은 형식 지정을 수행하는 두 번째 방법을 만드는 것입니다.이 방법은 시간을 매개 변수로 사용합니다. 그런 다음 서식을 쉽고 철저하게 테스트 할 수 있습니다.

그런 다음 원래 방법으로 시스템 시간 (예 : System.currentTimeMillis())에 전달하는 새 메소드를 호출하고 이에 대한 테스트를 작성하지 않아도됩니다. 이 시점에서 아무 것도 할 수 없으므로 아무 것도 테스트 할 것이 없습니다.

관련 문제