developer tip

NUnit Assert.AreEqual DateTime 허용 오차

copycodes 2021. 1. 9. 10:13
반응형

NUnit Assert.AreEqual DateTime 허용 오차


아무도 이것에 대한 좋은 해결책을 찾았는지 궁금합니다.

단위 테스트에서; 우리는 일반적으로 Assert.AreEqual()결과를 검증 하는 사용 합니다. 모든 것이 좋고 좋습니다. DateTime 속성에서 이것을 사용하기 시작할 때까지.

시간은 매우 비슷하지만 때로는 밀리 초 단위로 떨어져 테스트가 실패합니다. 우리의 응용 프로그램에서; 초까지 정확하다면; 그것은 우리에게 충분합니다.

이 경우에 공차를 구현하는 좋은 방법을 찾은 사람이 있습니까? 일반적으로 해결 방법은 두 개의 개별 문으로 분할하는 것입니다. 하나는를 확인 .ToShortDateString()하고 다른 하나는 확인 .ToShortTimeString()하지만 이것은 내 의견으로는 엉성해 보입니다.


다음과 같이 허용 오차를 확인할 수 있습니다.

Debug.Assert((date1 - date2) < TimeSpan.FromSeconds(1));

어떤 날짜가 더 최신인지 확실하지 않은 경우

Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)

NUnit은 또한 Within키워드를 사용하여 이에 대한 기본 지원을 추가했습니다.

DateTime now = DateTime.Now;
DateTime later = now + TimeSpan.FromHours(1.0);

Assert.That(later, Is.EqualTo(now).Within(TimeSpan.FromHours(3.0)));
Assert.That(later, Is.EqualTo(now).Within(3).Hours);

Assert.AreEqual 대신 Assert.ThatIs.Equal 제약 조건을 사용하십시오 . 아래는 Nunit 웹 사이트 자체의 코드 샘플입니다.

DateTime now = DateTime.Now;
DateTime later = now + TimeSpan.FromHours(1.0);

Assert.That(now, Is.EqualTo(now) );
Assert.That(later, Is.EqualTo(now).Within(TimeSpan.FromHours(3.0)));
Assert.That(later, Is.EqualTo(now).Within(3).Hours);

임의의 두 날짜가 1 초 허용 오차 이내와 같은지 정확하게 확인하려면 다음이 올바른 솔루션입니다.

Debug.Assert(Math.Abs((date1 - date2).TotalSeconds) < 1)

허용 된 솔루션이 1 초 이상 더 date2때 잘못 date1되었고 솔루션이 @ SwDevMan81에 대한 내 의견에 따라 업데이트되지 않았기 때문에 솔루션으로 추가 할 것이라고 생각 했습니다.

참조 URL : https://stackoverflow.com/questions/3577856/nunit-assert-areequal-datetime-tolerances

반응형