Насмешка над типом массива с Rhino Mock - PullRequest
1 голос
/ 28 октября 2009

У меня проблемы с макетом массива с 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 ]

1 голос
/ 20 января 2010

Нельзя издеваться над Check.details, потому что он не виртуальный. RhinoMocks, Moq и т. Д. Не могут издеваться над не виртуальными методами.

Чтобы решить эту проблему, сделайте поле виртуальным:

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

Но ... и вот реальная точка зрения: почему вы пытаетесь смоделировать массив деталей? Что именно ты пытаешься сделать? Объясните, что вы пытаетесь сделать, и мы действительно сможем вам помочь.

0 голосов
/ 21 декабря 2011

почему бы просто не создать массив? есть ли причина, по которой вы хотите смоделировать массив? Я думаю, вы могли бы просто использовать реальный массив и утверждать, что у вас есть любые элементы (которые могут быть фиктивными экземплярами) в массиве, который вы хотите. мне трудно представить тест, который вы не могли бы провести с реальным массивом.

0 голосов
/ 29 октября 2009

При создании деталей проверки вам, вероятно, придется сделать это с IEnumerable:

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

вместо массива ...

...