2017-12-13 14 views
0

私はこのコードを持っており、opts.Items["foo"]が正しく設定されているかどうかテストしたいと思っています。正しい動作オプションでAutoMapperが呼び出されたことをテストするテストを書く方法

public Result DoStuff(MyInput myObj) 
{ 
    var mapped = _mapper.Map<Result>(myObj, 
     opts => 
     { 
      opts.Items["foo"] = "bar"; 
     }); 
    return mapped; 
} 

そして、私のテストは、この

public void MapperShouldBeCalledWithCorrectOperationItems() 
{ 
    // Arrange 
    var optObj = Substitute.For<IMappingOperationOptions>(); 
    Action<IMappingOperationOptions> argumentUsed = null; 
    _mapper.Received().Map<Result>(result, Arg.Do<Action<IMappingOperationOptions>>(arg => argumentUsed = arg)); 

    // Act 
    _uut.DoStuff(new MyInput()); 
    argumentUsed.Invoke(optObj); 

    // Assert 
    optObj.Items["foo"].Should().Be("bar"); 
} 

のように見える今、これは動作しませんし、私は正しい道によさえわからない:(

私はしないでください私は、私が代わりにIMappingOperationOptionsItems["foo"]セットを持っていることを確認する必要がラムダを検査することができると思います。

任意の提案ですか?

+0

テストする方法はどのように見えますか?あなたの最初のコードはメソッドではなく、コードのブロックであることを意味します。 – Evk

+0

@Evkは投稿を編集しました。うまくいけばそれはもう少し明確になります –

+0

しかし、あなたは置換されたマッパーを '_uut'クラスに渡すことはありません。したがって、通常の '_mapper'を使用します。 – Evk

答えて

0

私はそれを理解しました!

public void MapperShouldBeCalledWithCorrectOperationItems() 
{ 
    // Arrange 
    var optObj = Substitute.For<IMappingOperationOptions>(); 

    Action<IMappingOperationOptions> argumentUsed = null; 
    _mapper 
     .Map<Result>(Arg.Any<Result>, 
        Arg.Do<Action<IMappingOperationOptions>>(arg => argumentUsed = arg)); 

    // Act 
    _uut.DoStuff(new MyInput()); 
    argumentUsed.Invoke(optObj); 

    // Assert 
    optObj.Items["foo"].Should().Be("bar"); 
} 
関連する問題