2013-07-30 1 views
0

Я пытаюсь проверить класс доступа к данным. В принципе, функция1 считывает данные непосредственно из DataContext, а другая функция2 добавляет фильтры. function1 и function2 могут быть в том же классе или наследовать класс.Rhino Mocks или StructureMap AutoMocks как заглушить функции в том же классе/Inherit?

Как я могу вернуть значение функции function1 и функцию test2?

Пример кода Я получил это далеко, но он не работает. Я попытался использовать 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()); 
} 

ответ

2

Что вам нужно, чтобы заставить это работать, является «частичным макетом». Rhino Mocks может только заглушить виртуальные методы при выполнении частичных mocks. Если вы отметите TestFunction1 как virtual, он должен работать.

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

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

+0

Большое спасибо за ваш комментарий, я проверил прошлой ночью, сделав метод виртуальным. И спасибо за то, что он указал на проблему AreSame. –

Смежные вопросы