無効な呼び出し、最後の呼び出しが使用されているか、何の呼び出しが行われていません
-
18-09-2019 - |
質問
PropertyBehavior()
を持つようにモックを設定しようとすると、私はこのエラーを取得しています:
のSystem.InvalidOperationException:System.InvalidOperationExceptionが: 無効な呼び出し、最後の呼び出しが使用されているか、何の呼び出しは(あなたは仮想(C#の)/オーバーライド可能(VB)メソッドを呼び出していることを確認してください)行われていない..
私は Rhinoのモック3.5 の(アレンジ法を使用しようとしています、アサート)
ここに私のコードは次のとおりです。
private IAddAddressForm form;
private AddAddressMediator mediator;
[TestInitialize()]
public void MyTestInitialize()
{
form = MockRepository.GenerateMock<IAddAddressForm>();
mediator = new AddAddressMediator(form);
// Make the properties work like a normal property
Expect.Call(form.OKButtonEnabled).PropertyBehavior();
//I tried this too. I still get the exception
//SetupResult.For(form.OKButtonEnabled).PropertyBehavior();
}
[TestMethod]
public void TestOKButtonEnabled()
{
form.OKButtonEnabled = true;
Assert.IsTrue(form.OKButtonEnabled);
}
私は(私がすべき上記のコードのためにと)私はスタブを使用することができます知っているが、私はRhinoのモックを学ぶしようとしています。
最終的に私はいくつかのプロパティは、その値がアクセスしたことを確認することができるようにしたいです。 (そのform.FirstName
がアクセスされた確認方法上の任意のヒント(すなわちゲッターが呼ばれた)もまた理解されるであろう。)
、ここIAddressForm
するコードは、次のとおりです。
namespace AddressBook
{
public interface IAddAddressForm
{
string FirstName { get; set; }
string LastName { get; set; }
string Address1 { get; set; }
string State { get; set; }
string Address2 { get; set; }
string ZipCode { get; set; }
string City { get; set; }
bool OKButtonEnabled { get; set; }
}
}
とにかく、私はインターフェイスに渡していますように、仮想の問題ではないだろうと思ったが、私は明らかに何かが欠けています。
解決
は、前PropertyBehavior
を使ったことがないが、これは、あなたが探している構文のですか?
form.Stub(x=>x.OKButtonEnabled).PropertyBehavior()
Rhinoのモックは現在、拡張メソッドを完全に動作します。唯一の静的呼び出し私のすべては、それ以上はMockRepository.GenerateStub
することであることを確認します。
他のヒント
あなたは代わりにモックのスタブを使用して言及したが、あなたはそれを変更するに行く前に、私は私がGenerateMockを使用するときに、私はGenerateStubを使用するほうが不思議な、私は無効なコール例外を取得していることに注意したい。
View = MockRepository.GenerateStub<IAddressView>();
View.Stub(v => v.Message).PropertyBehavior();
これは無効なコール例外をスローし、はい、IAddressView.Messageはゲッターとセッターを持っています。
Iは非仮想メソッドに期待を設定しようとしたとき、私はこのエラーを受信します。
mockedObject.Expect(a => a.NonVirtualMethod()).Returns(null);
私はNonVirtualMethodが仮想作ったときにエラーが去っていきました。
私はあなたがすべての期待を設定した後MockRepository.ReplyAllを()しなければならない、あなたは、このモックの使用を開始する前に考えています。だからあなたの場合、私の推測では、仲介者=新しいAddAddressMediator(フォーム)の前にExpect.Callラインを移動;,し、その直後、すべての返信を堅持しなければならないということです。
[TestInitialize()]
public void MyTestInitialize()
{
form = MockRepository.GenerateMock<IAddAddressForm>();
// Make the properties work like a normal property
Expect.Call(form.OKButtonEnabled).PropertyBehavior();
//I tried this too. I still get the exception
//SetupResult.For(form.OKButtonEnabled).PropertyBehavior();
MockRepository.ReplyAll();
mediator = new AddAddressMediator(form);
}
internal
プロパティを呼び出すようにしようとしていた時に私はこの問題に遭遇しました。この場合、追加.PropertyBehavior()
は助けにはならなかった。
私のソリューションは、プロパティのうち、私はその後、(パラメータとして)このメソッドに依存性を注入内部メソッドにロジックを抽出することであった。