Подтвердить что ты не робот

Как высмеять вызов функции на конкретном объекте с помощью Moq?

Как я могу сделать это в Moq?

Foo bar = new Foo();
Fake(bar.PrivateGetter).Return('whatever value')

Кажется, я могу только найти, как издеваться над объектом, который был создан через фреймворк. Я хочу высмеять только один метод/свойство для конкретного объекта, который я создал.

В TypeMock я бы просто сделал Isolate.WhenCalled(bar.PrivateGetter).Returns('whatever value').

Любые идеи?

4b9b3361

Ответ 2

Вы должны использовать Moq для создания вашего объекта Mock и установить для свойства CallBase значение true для использования поведения объекта.

Из документации Moq: CallBase определяется как "Вызывать реализацию базового класса, если никакое ожидание не отменяет член. Это называется" Partial Mock ", что позволяет высмеять определенную часть класса без необходимости издеваться над всем.

Пример кода:

    [Test]
    public void FailintgTest()
    {
        var mock = new Moq.Mock<MyClass>();
        mock.Setup(m => m.Number).Returns(4);
        var testObject = mock.Object;
        Assert.That(testObject.Number, Is.EqualTo(4));
        Assert.That(testObject.Name, Is.EqualTo("MyClass"));
    }

    [Test]
    public void OKTest()
    {
        var mock = new Moq.Mock<MyClass>();
        mock.Setup(m => m.Number).Returns(4);
        mock.CallBase = true;
        var testObject = mock.Object;
        Assert.That(testObject.Number, Is.EqualTo(4));
        Assert.That(testObject.Name, Is.EqualTo("MyClass"));
    }

    public class MyClass
    {
        public virtual string Name { get { return "MyClass"; } }

        public virtual int Number { get { return 2; } }
    }

Ответ 3

Молы также могут заменять частные методы, пока вид на подписи виден. Поэтому в этом случае это будет выглядеть так:

MFoo bar = new MFoo { // instantiate the mole of 'Foo'
    PrivateGetterGet = () => "whatever value" // replace PrivateGetter {get;}
};
Foo realBar = bar; // retrive the runtime instance
...

Если вы ищете дополнительную информацию о Moles, начните с учебников по http://research.microsoft.com/en-us/projects/pex/documentation.aspx.