Moq void метод - PullRequest
       17

Moq void метод

5 голосов
/ 03 февраля 2011

Я пытаюсь понять, как все это Mock (с использованием инфраструктуры Moq) работает, но я немного запутался с методами, которые возвращают void.

Исходный объект имеет следующие методы / свойства:

void Add(Person entity);
void Save();
IQueryable<Person> Persons;

Метод Add вызывает InsertOnSubmit (это Linq to sql), а метод Save вызывает Context.SubmitChanges().Свойство Person возвращает объект Table<News>.

Однако я не уверен, как мне надругаться над этими методами, поскольку я, очевидно, не могу использовать Returns().

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

1 Ответ

3 голосов
/ 11 февраля 2011

Это зависит от того, что вы собираетесь тестировать.

Moq может значительно помочь вам, когда вы хотите проверить взаимодействия между тестируемым классом и другими классами.В случае, если вы описываете, вы, вероятно, тестируете класс, который использует класс с методами и свойствами, упомянутыми выше.Чтобы проверить взаимодействия, вы хотите проверить, вызывается ли метод Add с ожидаемыми параметрами, вызывается ли метод Save и используется ли свойство Persons для чтения результатов.Это может быть достигнуто следующим образом:

var mockedClass = new Mock<IDaoClass>();
var classUnderTest = ...

mockedClass.SetupGet(m => m.Persons).Returns(new List<Person>().AsQueryable());

classUnderTest.DoSomething();

mockedClass.Verify( m => m.Add(It.IsAny<Person>())); 
mockedClass.Verify( m => m.Save());

Если вы хотите проверить что-то еще и предоставить реализацию stub этих методов, то вы можете просто создать тестовую реализацию илирассмотрите возможность использования настроек Moq с функциями, выраженными как лямбды, а не простыми настройками.

...