用Rhino Mock嘲笑一个类型的数组

时间:2009-10-28 15:46:38

标签: mocking rhino-mocks

我遇到了使用Rhino Mock模拟数组的问题,任何方向都会很棒。

namespace Checks_Rhino_Mocks
{
    public class Check
    {
        public Header header;
        public Detail[] details;
    }

    public class Header
    {
        public string Number;
        public decimal Amount;
    }

    public class Detail
    {
        public string Id;
    }


    [TestFixture]
    public class CheckUT
    {
        [Test]
        public void CheckShouldHaveMultipleDetails()
        {
            MockRepository mock = new MockRepository();

            Check check = mock.StrictMock<Check>();
            check.header = mock.StrictMock<Header>();
            //issue
            check.details = mock.StrictMock<Detail[]>();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

你不能模拟Check.details,因为它不是虚拟的。 RhinoMocks,Moq等不能模拟非虚方法。

要解决此问题,请将字段设为虚拟:

public class Check
{
    public virtual Header header;
    public virtual Detail[] details;
}

但是......这就是真正的观点:你为什么试图模拟一个Detail数组?你究竟想做什么?解释你正在尝试做什么,我们将能够真正帮助你。

答案 1 :(得分:0)

创建检查详细信息时,您可能需要使用IEnumerable:

check.details = mock.StrictMock<IEnumerable<Detail>>();

而不是数组...

答案 2 :(得分:0)

为什么不创建一个数组呢?你想要模拟一个数组是有原因的吗?我认为你可以使用一个真正的数组并断言你想要的数组中有任何元素(可能是模拟实例)。我很难想象你只能用一个真正的数组做的测试。