문제

저는 현재 매 k초마다 n번 작업을 수행하는 간단한 타이머 기반 미니 앱을 C#으로 작성 중입니다.
저는 테스트 중심 개발 스타일을 채택하려고 노력 중이므로 앱의 모든 부분을 단위 테스트하는 것이 목표입니다.

그래서 내 질문은 다음과 같습니다.타이머 기반 클래스를 단위 테스트하는 좋은 방법이 있습니까?

내가 보기에 문제는 원하는 작업이 수행될 때까지 너무 오랫동안 기다려야 하기 때문에 테스트를 실행하는 데 불편할 정도로 오랜 시간이 걸릴 위험이 크다는 것입니다.
특히 프레임워크에서 허용하는 최소 시간 해상도(1ms?)를 사용하는 대신 현실적인 데이터(초)를 원하는 경우.
나는 작업에 대한 모의 개체를 사용하여 작업이 호출된 횟수를 등록하고 작업에 거의 시간이 걸리지 않도록 합니다.

도움이 되었습니까?

해결책

내가 한 일은 타이머와 현재 시스템 시간을 조롱하여 내 이벤트가 즉시 트리거될 수 있도록 하는 것이었지만 테스트 중인 코드에 관한 한 경과 시간은 초였습니다.

다른 팁

이 경우 내가 할 일은 전체 시퀀스가 ​​아니라 타이머가 작동할 때 실제로 실행되는 코드를 테스트하는 것이라고 생각합니다.실제로 결정해야 할 것은 응용 프로그램의 실제 동작을 테스트하는 것이 가치가 있는지(예를 들어 모든 틱 후에 발생하는 일이 한 틱에서 다른 틱으로 급격하게 변경되는 경우) 또는 충분한지(즉, , 작업은 매번 동일합니다) 논리를 테스트하기만 하면 됩니다.

타이머의 동작은 절대 변하지 않는다는 것이 보장되기 때문에 제대로 작동할 것인지(즉, 올바르게 구성했는지) 작동하지 않을 수도 있습니다.실제로 필요하지 않은 경우 테스트에 포함시키는 것은 낭비적인 노력인 것 같습니다.

나는 단위 테스트 관점에서 단순히 타이머 메커니즘을 잊어버리고 작업 자체가 예상대로 작동하는지 확인하는 것이 합리적이라는 점에서 Danny의 의견에 동의합니다.또한 자동화된 테스트 모음에 타이머 구성을 포함시키는 것은 노력 낭비라는 점에 동의하지 않습니다.타이밍 애플리케이션으로 작업할 때 극단적인 경우가 많이 있으며, 테스트하기 쉬운 항목만 테스트하여 잘못된 보안 감각을 조성하는 것은 매우 쉽습니다.

타이머와 실제 동작을 실행하는 일련의 테스트를 권장합니다.이 제품군은 실행하는 데 시간이 좀 걸릴 수 있으며 로컬 컴퓨터에서 항상 실행되는 것이 아닐 수도 있습니다.그러나 이러한 유형의 항목을 야간 자동화 빌드에 설정하면 버그를 찾아서 수정하기가 너무 어려워지기 전에 버그를 근절하는 데 실제로 도움이 될 수 있습니다.

간단히 말해서 귀하의 질문에 대한 제 대답은 실행하는 데 오랜 시간이 걸리는 몇 가지 테스트를 작성하는 것에 대해 걱정하지 마십시오.가능한 단위 테스트를 수행하고 해당 테스트 모음을 빠르고 자주 실행하도록 하세요. 하지만 실행 빈도는 낮지만 더 많은 애플리케이션과 해당 구성을 다루는 통합 테스트로 이를 보완해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top