2017-04-25 7 views
1

私はこのユニットテストをしていますが、例外をスローしようとしていますが、できません。Expected ExceptionExceptionをスローするStubが動作していないTimeoutExceptionが発生していないc#

[TestMethod] 
    [ExpectedException(typeof(TimeoutException))] 
    public async Task HandleAsyncDeleteModel_WhenRepositoryFails_ThrowsException() 
    { 
     //Arrange 
     var token = new CancellationToken(); 
     var deleteModel = new DeleteProcessCommand(_img, _tnt, _pro, _url); 
     var writeRepository = new StubIWriteRepository<Dto>() 
     { 
      DeleteIfExistsAsyncGuidGuidGuidCancellationToken = (img, tnt, pro, tkn) => 
      { 
       throw new TimeoutException(); 
      } 
     }; 

     var Logger = new StubILogger(); 
     var commandHandler = new CommandHandler(Logger, writeRepository, null, null, null, null, null, null); 

     //Act 
     await commandHandler.HandleAsync(deleteModel, token); 
    } 
+0

この行為では、代わりに待っています。方法を試してください。 // Act commandHandler.HandleAsync(deleteModel、token).Wait(); これを試してください。 – AzzamAziz

答えて

0

ユニットテストでは非同期メソッドが待機しません。誰も非同期メソッドの結果を求めていません。結果を待つように強制するには、その上に.Waitを実行する必要があります。

[TestMethod] 
[ExpectedException(typeof(TimeoutException))] 
public async Task HandleAsyncDeleteModel_WhenRepositoryFails_ThrowsException() 
{ 
    //Arrange 
    var token = new CancellationToken(); 
    var deleteModel = new DeleteProcessCommand(_img, _tnt, _pro, _url); 
    var writeRepository = new StubIWriteRepository<Dto>() 
    { 
     DeleteIfExistsAsyncGuidGuidGuidCancellationToken = (img, tnt, pro, tkn) => 
     { 
      throw new TimeoutException(); 
     } 
    }; 

    var Logger = new StubILogger(); 
    var commandHandler = new CommandHandler(Logger, writeRepository, null, null, null, null, null, null); 

    //Act 
    commandHandler.HandleAsync(deleteModel, token).Wait(); 
} 
+0

それは働いて、ありがとう:) –

関連する問題