2013-09-03 4 views
0

Я столкнулся с проблемой при написании модульного теста, где в методе, который я вызываю, он не изменяет макет объекта, в котором я прошел. Я не уверен, есть что-то очевидное, что мне не хватает?Изменить значение свойства свойства mock object

я установка Ложного следующим образом:

var mockList = new List<Mock<IDocument>>(); 

for (int i = 0; i < 4; i++) 
{ 
    var mockDocument = new Mock<IDocument>(); 
     mockDocument.Setup(t => t.DocumentNo).Returns(i.ToString()); 
     mockList.Add(mockDocument); 
} 

mockDocumentRepository.Setup(x => x.GetDocuments(It.IsAny<string>(), It.IsAny<string>())) 
    .Returns(mockList.Select(m => m.Object).ToList()); 

В выполненном методе, если попытаться изменить еще одно свойство на издевались класс (например, t.DocumentName) значение остается Null. Есть ли способ настроить это свойство для принятия изменений?

Причина, по которой я делаю это, - проверить, был ли сбор документов изменен другой коллекцией в методе. Не уверен, есть ли лучший способ сделать это?

+0

Является ли 'IDocumentList' в первой строке опечаткой для' IDocument'? –

+0

Да, извините! Исправлено это сейчас. – Damon

ответ

2

Moq оставит все методы нереализованными, если не указано иное, и включает свойства. Если вы используете mockDocument.SetupProperty(doc => doc.DocumentName);, он будет реализовывать свойство как обычное авто-свойство. Вы можете использовать mockDocument.SetupAllProperties(), если вы хотите, чтобы все свойства были автоматически реализованы, но вам все равно придется делать это для каждого макета.

Вы также могли бы рассмотреть возможность создания заглушки вместо насмехаться:

public class StubDocument : IDocument 
{ 
    public string DocumentNo { get; set; } 
    public string DocumentName { get; set; } 
    ... 
} 

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

+0

Бум! Спасибо, работаю так, как хочу этого сейчас (в ретроспективе я должен был просто перейти на http://code.google.com/p/moq/wiki/QuickStart, что объясняет метод SetUpProperty). – Damon

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