2011-10-03 12 views
7

NS代理人では、プロパティーセッターに渡す値をキャプチャーする方法はありますか?NS代理代理権 "セッター"プロパティー呼び出しのみ

など。私は、次のインタフェースがある場合:

public interface IStudent { 
    int Id { set; } 
    string Name { set; } 
} 

をザ・私は例えば作成した代替品を持っていると言う:

var _studentSub = Substitute.For<IStudent>(); 

は方法を「設定」のいずれかの場合、私は値を傍受してキャプチャすることができますどのような方法があります代理人が呼び出されますか?

答えて

13

NSubstituteの標準的なアプローチは、ゲッターとセッターでプロパティを持つことです。代わりに代用のプロパティが期待どおりに機能する(つまり、設定されているものが返されます)。

あなたのインタフェースはセッターのみの特性を有することがある場合は、Arg.Doを使用して、個々のプロパティの値をキャプチャすることができます:取得/設定とプロパティについては

[Test] 
public void Setter() { 
    var sub = Substitute.For<IStudent>(); 
    var name = ""; 
    sub.Name = Arg.Do<string>(x => name = x); 

    sub.Name = "Jane"; 

    Assert.AreEqual("Jane", name); 
} 
+0

、あなたが使用することはできsub.Name = Arg.Do (x => name = x);値を取得し、引き続きsub.Name.Returns( "MySampleName");を使用します。戻り値は? 「返品」は私たちにとってはうまくいかないようです! – bstack

+1

ちょうどチェックされて、同じ取得/設定プロパティのArg.Doと戻り値を混合するバグであると思われます。 Arg.DoをWhen..Doに切り替えると動作します。例えば(x => x.Name = Arg.Any ())。do(x => name = x.Arg ()); " –

+1

作業については、[バグ報告](https://github.com/nsubstitute/NSubstitute/issues/59)を参照してください。 –

関連する問題