Rhino Mocks, или StructureMap AutoMocks, как заглушки функций в том же / Наследовать класс?

Я пытаюсь проверить класс доступа к данным. По сути, функция 1 читает данные напрямую из DataContext, а другая функция 2 добавляет фильтры. function1 и function2 могут быть в одном классе или наследовать класс.

Как я могу заглушить возвращаемое значение function1 и проверить function2?

Пример кода, который я получил далеко, но он не работает. Я пытался использовать Rhino Mocks и StructureMap Auto Mock, все еще получая ошибки при заглушке.

Любая помощь приветствуется. Большое спасибо.

public class TestClass : ITestClass
{
    private DbContext _context;

    public IEnumerable<TestObject1> TestFunction1()
    {
        return _context.GetSomething();
    }

    public TestObject2 TestFunction2()
    {
        return TestFunction1().Where(x=>x.Parent == null);
    }
}
public interface ITestClass
{
    IEnumerable<TestObject1> TestFunction1();
    TestObject2 TestFunction2();
}
[Test]
public void TestFunction2_Test()
{
    var mock = MockRepository.GenerateMock<TestClass>();

    var test = new List<TestObject1>();

    mock.Stub(x=>x.TestFunction1()).Return(test);

    var result = mock.TestFunction2();

    Assert.AreSame(1, result.Count());
}

1 ответ

Решение

То, что вам нужно для того, чтобы заставить это работать, - это "частичная насмешка". Moh Rhino может заглушать виртуальные методы только при выполнении частичных mock. Если вы отметите TestFunction1 как virtual он должен работать.

Также вы должны использовать Assert.AreEqual, так как он проверяет равенство значений ("эквивалентны ли объекты?"). Assert.AreSame проверяет равенство ссылок ("это один и тот же объект?"). Смотрите этот ответ для дальнейшего объяснения.

Что касается частичных издевательств в целом, их следует избегать. Необходимость выполнять частичные макеты часто свидетельствует о том, что класс пытается сделать слишком много. Либо протестируйте функцию как часть модульного теста класса, либо извлеките ее в отдельный сотрудничающий класс.

Другие вопросы по тегам