Очень простой тест RhinoMocks не пройден - что здесь не так? - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь выяснить, почему некоторые из моих тестовых случаев (с использованием RhinoMocks 3.6 Build 20) не работают, и я сузил проблему до следующего минимального модульного теста:

public interface ITest
{
    string Something { get; }
}

[Test]
public void TestStub()
{
    var mockery = new MockRepository();
    var testItem = mockery.Stub<ITest>();
    testItem.Stub(x => x.Something).Return("Hello");
    Assert.AreEqual("Hello", testItem.Something);
}

Это не так с сообщением:

Expected: "Hello" But was: null

Есть идеи, что я здесь не так делаю?Я нашел несколько примеров на SO и Rhino Wiki о том, как заглушить свойства, доступные только для чтения, и, насколько я могу судить, это должно работать нормально.

Заранее спасибо.

РЕДАКТИРОВАТЬ: Исходя из рекомендаций sll ниже, я попытался заменить

testItem.Stub(x => x.Something).Return("Hello");

на

testItem.Expect(x => x.Something).Return("Hello");

, и проверка все равно не прошла таким же образом.

Редактировать 2: Я получил эту работу, добавив строку

mockery.ReplayAll();

перед Assert - но я подумал, что это больше не требуется (из вики: "Mocks / stubs возвращены из MockRepository.GenerateMock () и MockRepository.GenerateStub () возвращаются в режиме воспроизведения и не требуют явного перехода в режим воспроизведения. ")

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

Понял:

Из комментариев RhinoMocks 3.6 в блоге :

09.03.2009 17:34 Курт Харригер

FYI,

У меня было несколько десятков неудачных тестов после обновления до версии 3.6 из кода, подобного следующему:

var mocks = new MockRepository ();

var что-то = mocks.Stub

thing.Stub (x => x.DoSomething ()) .Return (true);

something.DoSomething ();

Основная причина проблемы заключается в том, что mock.Stub / Mock / etc больше не возвращает mock в режиме воспроизведения. Исправить замененный макет. Stub с MockRepository.GenerateStub.

Ayende Rahien 03.09.2009 18:50 по Ayende Rahien

Курт,

Это на самом деле ожидается, что никогда не должно было работать

Итак, изменив тест на:

    [Test]
    public void TestStub()
    {
        var testItem = MockRepository.GenerateStub<ITest>();
        testItem.Stub(x => x.Something).Return("Hello");
        Assert.AreEqual("Hello", testItem.Something);
    }

теперь это работает.

Приветствия

1 голос
/ 03 апреля 2012

Попробуйте вместо этого создать Mock:

var testItem = MockRepository.GenerateMock<ITest>();     
testItem.Expect(x => x.Something).Return("Hello");     
Assert.AreEqual("Hello", testItem.Something); 

Также убедитесь, что вы указали общий метод тестирования, возможно, вы проигнорировали некоторые строки кода? Попробуйте использовать Repeat.Any() возможно, proeprty доступ до того, как вы делаете ожидание.

testItem.Expect(x => x.Something).Return("Hello").Repeat.Any();     

На странице примера Stub() используется для методов и предлагается использовать Mock's Expect() для свойств:

Использование Expect () для настройки свойств

Метод расширения Expect () можно использовать для установки ожиданий и возвращаемые значения для свойств.

0 голосов
/ 03 апреля 2012

Вы просто устанавливаете значение, так что вы ожидаете сделать это следующим образом:

public interface ITest
{
    string Something { get; }
}

[Test]
public void TestStub()
{
    var mockery = new MockRepository();
    var testItem = mockery.Stub<ITest>();
    testItem.Something = "Hello";
    Assert.AreEqual("Hello", testItem.Something);
}

Нет необходимости заглушки с Func.

...