次のコードがあります。そのプロパティを 2 回スタブ化する正当な理由があります (以下の説明を参照)。スタブを一度だけ許可しているようです。
private IStatus _status;
[SetUp()]
public void Setup() {
this._status = MockRepository.GenerateStub<IStatus>();
this._status.Stub(x => x.Connected()).Return(true);
// This next line would usually be in the Setup for a subclass
this._status.Stub(x => x.Connected()).Return(false);
}
[Test()]
public void TestTheTestFramework() {
Assert.IsFalse(this._status.Connected()); // Fails...
}
public interface IStatus {
bool Connected { get; }
}
最新のビルド(3.6 ビルド 21) をダウンロードしようとしましたが、それでも同じ問題が発生します。なぜこれができないのかについてのアイデアはありますか?Connected
プロパティをIStatus
関数に変更しようとしましたが、テストはまだ失敗しました。VB.Net でも同じ動作をします... バグですか?
ダブルスタブの説明
継承を中心にテストを構成しています。そうすれば、注入されたモック依存関係を使用してさまざまな条件をシミュレートし、共通のセットアップ コードを 1 回だけ実行できます。接続がダウンしたときの SUT の動作をテストするサブクラスでオーバーライドしたい基本/デフォルトのスタブ値 (たとえば、はい、接続されています) を提供する場合があります。私は通常、このようなコードになります。
[TestFixture()]
public class WhenPublishingAMessage {
// Common setup, inject SUT with mocked dependencies, etc...
[Test()]
public void ShouldAlwaysWriteLogMessage {
//Example of test that would pass for any sub-condition
}
[TestFixture()]
public class AndNoConnection : WhenPublishingAMessage {
// Do any additional setup, stub dependencies to simulate no connection
// Run tests for this condition
}
[TestFixture()]
public class AndHaveConnection : WhenPublishingAMessage {
// Do any additional setup and run tests for this condition
}
}
編集
Rhino Mocks google グループのこの投稿が参考になるかもしれません。this._status.BackToRecord();
状態をリセットするには、いわば呼び出す必要があるようです...また、 .Repeat.Any()
2番目のスタブステートメントに追加することも役立つようです。後で詳細を投稿する必要があります。