Rhino模拟AAA ExpectationViolationException

时间:2012-02-29 06:36:17

标签: c# unit-testing mocking rhino-mocks

运行rhinomock测试方法时出错:测试方法TestProject1.UnitTest2.TestMethod1抛出异常: Rhino.Mocks.Exceptions.ExpectationViolationException:ITestInterface.Method1(5);预期#1,实际#0。

我的代码如下: -

namespace ClassLibrary1
{
    public interface ITestInterface
    {
        bool Method1(int x);

        int Method(int a);
    }

    internal class TestClass : ITestInterface
    {

        public bool Method1(int x)
        {
            return true;
        }

        public int Method(int a)
        {
            return a;
        }
    }
}

我的测试看起来像是: -

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

namespace TestProject1
{
    [TestClass]
    public class UnitTest2
    {
        [TestMethod]
        public void TestMethod1()
        {
            ITestInterface mockProxy = MockRepository.GenerateMock<ITestInterface>();

            TestClass tc = new TestClass();
            bool result = tc.Method1(5);           

            Assert.IsTrue(result);


            mockProxy.AssertWasCalled(x => x.Method1(5));

        }
    }
}

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

您希望调用ITestInterface.Method1,但它永远不会 您根本不在测试代码中使用mockProxy - 您只需创建它并创建自己的实例,但两者之间没有任何关系。
您的TestClass不依赖于您想要模拟的任何接口,使用模拟的类似示例将是:

internal class TestClass
{
    private ITestInterface testInterface;

    public TestClass(ITestInterface testInterface)
    { 
       this.testInterface = testInterface;
    }

    public bool Method1(int x)
    {
        testInterface.Method1(x);
        return true;
    }

}

[TestClass]
public class UnitTest2
{
    [TestMethod]
    public void TestMethod1()
    {
        ITestInterface mockProxy = MockRepository.GenerateMock<ITestInterface>();

        TestClass tc = new TestClass(mockProxy);
        bool result = tc.Method1(5);           

        Assert.IsTrue(result);


        mockProxy.AssertWasCalled(x => x.Method1(5));
    }
}

我认为您应该阅读有关使用Rhino Mocks的更多信息,例如: Rhino Mocks AAA Quick Start?