2017-02-23 13 views
0

ユニットテストにMicrosoft.VisualStudio.TestTools.UnitTestingを使用しています。Assert.ThrowsException例外がスローされたときにテストが失敗する

私は例外がスローされたと主張して、このテストを持っており、それは私がそれをデバッグする場合、コードの最後の行がエラーの前に実行し、失敗したために

[TestMethod] 
public async Task ShouldThrowHttpExceptionIfPassedObjectIsNull() 
{ 
    _mockLogger = new Mock<ILogger<DataService>>(); 

    // setup memoryCache 
    object expected = null; 
    _mockNullMemoryCache = MockMemoryCacheService.GetNullMemoryCache(expected); 
    _mockSessionManagementService = new MockSessionManagementService(); 

    _ds = new DataService(
     _mockLogger.Object, 
     _mockNullMemoryCache.Object, 
     _mockSessionManagementService 
    ); 
    Assert.ThrowsException<HttpException>(() => _ds.RetrieveFileData<object>(_incorrectFilePath, false)); 
} 

を失敗しているがこれです

enter image description here

例外exはですが、何が問題であってもHttpExceptionがスローされるので問題はありません。なぜテストが理由で失敗している:

テスト名:ShouldThrowHttpExceptionIfPassedObjectIsNullテスト フルネーム:xxx.xxx.xxx.xxx.ShouldThrowHttpExceptionIfPassedObjectIsNull テスト 出典:C:\ Users \ユーザーxxxは\ xxx.cs :ライン88テスト結果:失敗した試験時間:0:04:35.5251661

結果のStackTrace:xxxxxx.d__10.MoveNext() で でC:\ Users \ユーザーxxxは\ XXX \ xxx.cs:ライン - - 以前の場所からのstackトレースの終点、exceptio nは System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificationで System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスク タスク)(タスク タスク)結果メッセージで---スローされました:Assert.ThrowsExceptionに失敗しました。例外はありません がスローされました。 HttpException例外が予想されました。

EDITコードは、画像の後に、このコードブロックに移動

else 
       { 
        // Parsing issue 
        _logger.LogError(string.Format("Id={0}, Could not retrieve data from {1} : Malformed source data", _sessionManagementService.SessionId, url)); 
        throw new HttpException(HttpStatusCode.InternalServerError, "Malformed source data", true); 
       } 

それは上記HttpExceptionを投げているように、それはDllNotFoundExceptionをスロー。スロー

例外: System.Private.CoreLib.ni.dll

追加情報の 'System.DllNotFoundException': 指定されたモジュールが見つかりませんでした:DLL 'combase.dll' をロードできません。 。 (HRESULTからの例外:0x8007007E )

+0

@ThomasWellerいいえ、テストは、スローされたHttpExceptionのテストです。 – BeniaminoBaggins

答えて

2

私はHttpExceptionの型階層を見ると、私はそれがInvalidOperationExceptionが継承しないDOEことがわかります。したがって、単体テストが正しく失敗します。

おそらくLINQコードや他のコードが正しく実行できないため、HttpExceptionがキャッチされ、InvalidOperationExceptionに変換されます。

ユニットテストをデバッグできるはずです。 Visual Studioに例外が発生したときに停止するように指示し、段階的に進んで例外がどこに変換されるかを調べます。いくつかのLINQコードを実行すると

MoveNext()呼び出しは、値がループオーバーしようとしていることを示します。デバッグするときは、Just my codeを無効にします。これは、.NETフレームワーク内にある可能性があるためです。

+0

しかし、上記の画像のコード行から少しずつ進んでいくと、そのコード行の後にクラッシュするだけです。 – BeniaminoBaggins

+0

最後のコメントは無視してください。今それをやっている。お返事は – BeniaminoBaggins

+0

あなたの答えは解決策です。ありがとう!私はあなたが私が見つけたものに関して正しい方向に私を指すことができるかどうか疑問に思っています(私の質問の最後の編集を見てください)。それはHttpExceptionを最初に成功裏に投げたので奇妙ですが、最後の引数の3つの引数と比較して2つの引数しかありません。おそらく、テスト対象のコードを変更する必要がありますか? – BeniaminoBaggins

関連する問題