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.That 및 Is.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
'developer tip' 카테고리의 다른 글
Doctrine2 쿼리에서 제한 및 오프셋 사용 (0) | 2021.01.09 |
---|---|
Kotlin에서 예상되는 예외 테스트 (0) | 2021.01.09 |
MySQL tmp_table_size max_heap_table_size (0) | 2021.01.09 |
Windows PowerShell에 파일이 있는지 확인 하시겠습니까? (0) | 2021.01.09 |
BottomNavigationView 레이블 제거 (0) | 2021.01.09 |