>

NUNIT 2에서 NUNIT 3으로 단위 테스트를 리팩터링해야하며 다음 구문에서 오류가 발생합니다.

var expectedResponseMessage = new HttpResponseMessage();
Func<Task<HttpResponseMessage>> continuation = 
   () => Task.Factory.StartNew(() => expectedResponseMessage);

오류 :

Async test method must have non-void return type

어떻게 다시 작성할 수 있습니까? 나는 많은 구문을 시도했지만 운이 없다. 감사합니다.

  • 답변 # 1

    오류

    와이즈 비즈

    Async test method must have non-void return type

    인 NUnit 3+에서  단위 테스트 자체에는 async 가있을 수 있습니다.  리턴 타입 (즉, void 로 장식 된 메소드)  기타). 대신 빈 [Test] / [TestCase] 를 반환 할 수 있습니다  (비동기 테스트 지원 기능이있는 최신 버전의 NUnit에서 올바른 방법) :

    Task
    
    

    NUnit 2.x에서는 확인되지 않았으므로 [Test] public async Task EnsureFoo() { // Arrange // Act var myResult = await classBeingTested.DoSomethingAsync(); // Assert Assert.IsNotNull(myResult); ... }  단위 테스트는 단위 테스트 코드 기반에 빠질 수 있습니다 (예 :나쁜 일을하지 마십시오)

    async void
    
    

    이 방법은 다소 위험합니다. 테스트를 기다릴 수없고*계속하기 전에 다시 시작합니다 (예 : [Test] public async void Foo() // < -- Error : Async test method must have non-void return type { var myResult = await classBeingTested.DoSomethingAsync(); // Post continuation assertions here. } 의 모든 실패  계속 진행이보고되지 않을 수 있습니다.

    재 : 가짜 작업

    가짜 응답을 반환하기 위해 작업을 예약하는 것은 과도하게 보입니다. 즉, 대부분의 테스트에서 Asserts 를 사용할 수 있어야합니다.  바꾸려면 :

    Task.FromResult
    
    

    저렴한 가격 :

    Func<Task<HttpResponseMessage>> continuation = 
       () => Task.Factory.StartNew(() => expectedResponseMessage);
    
    

    Func<Task<HttpResponseMessage>> continuation = () => Task.FromResult(expectedResponseMessage);  주어진 반환 값으로 이미 완료된 작업을 반환합니다. 대부분의 경우 스레드 풀에서 독립적 인 작업을 실행하지 않으려는 경우 단위 테스트 목적으로 충분합니다.

    <시간>

    * 실제로 NUnit 2.6.4와 같은 이전 버전에서도 이미 Task.FromResult 의 문제를 식별했습니다.  테스트 및 해결 방법 포함

    async void

관련 자료

  • 이전 python - 루프없이 n 개의 난수 세트 생성
  • 다음 Azure Data Factory에서 부모 파이프 라인에서 자식 파이프 라인으로 값 전달