3

Rhino Mocks 3.6を使用すると、以下のコードを考えると、AssertWasCalledアサーションが通過することを期待しますが、そうではありません。代わりに、失敗したアサーションメッセージがあります。

"Rhino.Mocks.Exceptions.ExpectationViolationException:IBar.set_Model(7);期待される#1、実際の#0。"

IgnoreArguments()を試しても結果は変わりませんが、IBarプロパティをメソッドに変更し、引数を使用してメソッドが呼び出されたことを表明することはできます。

ここで何が欠けていますか?

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Rhino.Mocks;

public interface IFoo { }
public interface IBar { int Model { get; set; } }
public class Bar : IBar { public int Model { get; set; } }

public class Foo : IFoo
{
    public void MyMethod(IBar bar)
    {
        bar.Model = 7;
    }
}

[TestClass]
public class TestFoo
{
    [TestMethod]
    public void MyMethod()
    {
        var foo = new Foo();

        var mockBar = MockRepository.GenerateStub<IBar>();
        foo.MyMethod(mockBar);

        mockBar.AssertWasCalled(b => b.Model = 7);
    }
}
4

1 に答える 1

6

バーオブジェクトをスタブしている場合は、プロパティの値をアサーションする必要があります

Assert.AreEqual(7, mockBar.Name);

期待値をテストする場合は、スタブではなくモックを生成する必要があります

var mockBar = MockRepository.GenerateMock<IBar>();
foo.MyMethod(mockBar);
mockBar.AssertWasCalled(b => b.Model = 7);

スタブとモックの違い

モックは、期待を設定できるオブジェクトであり、期待されるアクションが実際に発生したことを確認します。スタブは、テスト対象のコードに渡すために使用するオブジェクトです。あなたはそれに期待を設定することができるので、それは特定の方法で機能しますが、それらの期待は決して検証されません。スタブのプロパティは自動的に通常のプロパティのように動作し、期待値を設定することはできません。

テスト対象のコードの動作を検証する場合は、適切な期待値を持つモックを使用して、それを検証します。特定の方法で動作する必要があるかもしれないが、このテストの焦点では​​ない値を渡すだけの場合は、スタブを使用します。

于 2012-10-18T21:14:53.747 に答える