2016-11-09 14 views
1

私はいくつかの非同期タスクのテストにMoqを使用しようとしています。c#moq test非同期タスク

mock.Objectを使用しようとすると、オブジェクト( 'm.Object'が 'Castle.DynamicProxy.Generators.GeneratorException'の例外をスローしました)がスローされ、VSが停止しますデバッグ/実行。

ここでidは、テストの部品番号の道:

interface ITestAsync 
     { 
      Task<IEnumerable<string>> get(); 
     } 

     [Fact] 
     public async Task MoqShouldReturnFIRST() 
     { 
      var m = new Mock<ITestAsync>(); 
      m.Setup(q => q.get()).ReturnsAsync(null); 

      var x = await m.Object.get().FirstIfNotNullOrEmptyAsync(); 

      x.Should().BeNull(); 
     } 

ここでは、私がテストしようとしています私の拡張についてはxUnitの

public class FirstIfNotNullOrEmptyAsyncTests 
    { 

     private async Task<IEnumerable<string>> getAll() 
     { 
      List<string> x = new List<string>(); 
      x.Add("01"); 
      x.Add("02"); 

      await Task.Delay(1000); 

      return x; 
     } 

     private async Task<IEnumerable<string>> getNull() 
     { 
      List<string> x = new List<string>(); 
      x = null; 

      await Task.Delay(1000); 

      return x; 
     } 

     private async Task<IEnumerable<string>> getEmpty() 
     { 
      List<string> x = new List<string>(); 

      await Task.Delay(1000); 

      return x; 
     } 

     [Fact] 
     public async Task ShouldReturnFIRST() 
     { 
      var x = await getAll().FirstIfNotNullOrEmptyAsync(); 

      x.Should().Be("01"); 
     } 

     [Fact] 
     public async Task ShouldReturnNULLforNULL() 
     { 
      var x = await getNull().FirstIfNotNullOrEmptyAsync(); 

      x.Should().BeNull(); 
     } 

     [Fact] 
     public async Task ShouldReturnNULLforEMPTY() 
     { 
      var x = await getEmpty().FirstIfNotNullOrEmptyAsync(); 

      x.Should().BeNull(); 
     } 
    } 

を使用して伝統的な方法でテストです

+2

再作成のテストに合格しました。最初の問題は、インターフェイスがプライベートであることでした(しかし、それは最小限の例によるものと推測されます)。一度インターフェイスが公開されたすべてのものが成功/合格 – Nkosi

+0

全体の例外メッセージを含める – Nkosi

答えて

1

インターフェイスがプライベートであったことが最初の問題でした(しかし、それは最小限の例によるものと推測されました)。

は、次のエラーを得た

Castle.DynamicProxy.Generators.GeneratorException:タイプ ため プロキシを作成することはできませんMoq.IMocked`1 [[**** + ITestAsync、 ***** 、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null]] タイプ**** + ITestAsyncがアクセス可能でないため、 にアクセスできません。 Assembly Moqは強力な名前が付けられているため、 [アセンブリ: InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)]] 属性を使用してアセンブリをパブリックまたは内部にしてマークします。

インタフェースは、公開すべてが働いてなされた後は/すべてすべてのテストに合格例から

public interface ITestAsync { 
    Task<IEnumerable<string>> get(); 
} 
+0

それは完璧!働いた!別の質問。コードカバレッジを実行すると、これらのテストでもエクステンションのすべての可能性がテストされていますが、MoveNext()部分のテストが不足しているため、90%しかカバーされていません。すべてが既にテストされている場合、これをどのようにテストできますか?何が欠けている?乾杯。 – 2Fast4YouBR

+0

それは、そのトピックの私の現在の知識ベースの外です。検索した後にコミュニティに尋ね、彼らが助けることができるかどうかを確認します。ハッピーコーディング!!!! – Nkosi