最初に私の質問、次にいくつかの詳細:
Q:プロパティの値が後続の代入で確実に使用されるようにする場合、プロパティの値をスタブ化する必要がありますか?
詳細:
MSpec クラスで Rhino Mocks 3.5 の AAA 構文を使用しています。以下のコードは、(願わくば) 簡単に理解できるようにトリミングしました。
*_fooResultMock のプロパティ値をスタブしない:*
[Subject("Foo")]
public class when_foo {
Establish context = () => {
_fooDependencyMock.Stub(x => x.GetResult()).Return(_fooResultMock);
_foo = new Foo(_fooDependencyMock);
};
Because action = () => {
_foo.Whatever();
};
It should_set_the_name_field = () => {
_fooTargetMock.AssertWasCalled(x => x.Name = _fooResultMock.Name);
};
}
*_fooResultMock のプロパティ値のスタブ:*
[Subject("Foo")]
public class when_foo {
Establish context = () => {
_fooDependencyMock.Stub(x => x.GetResult()).Return(_fooResultMock);
_fooResultMock.Stub(x => x.Name).Return(_theName); // _theName!
_foo = new Foo(_fooDependencyMock);
};
Because action = () => {
_foo.Whatever();
};
It should_set_the_name_field = () => {
_fooTargetMock.AssertWasCalled(x => x.Name = _theName); // _theName!
};
}
私のテストで重要なことは、_fooResultMock のプロパティで見つかった値が _fooTargetMock のName
プロパティに割り当てられることです。
では、最初のコード ブロックはそれを適切にテストするのでしょうか、それとも 2 番目のコード ブロック (_fooResultMock のName
プロパティの値をスタブ化する) が必要なのでしょうか?
2 番目のブロックは何らかの理由で望ましくありませんか?