Лучшая практика для имитации шаблона репозитория

Я начинаю с IoC / Mocking и хочу убедиться, что использую «лучшие практики» для своих репозиториев.

Я настраиваю интерфейсы для моих репозиториев. Конкретные реализации будут указывать на SQL, в то время как тестирование будет использовать Moq для создания «фейков». Я заметил, что я использую функцию обратного вызова Moq a lot . В this ] статья, утверждает автор [12 32], поскольку Moq предоставляет функциональные возможности в обеих этих областях для большей части того, что вы хотели бы делать, на самом деле не так много разных точек, в которых вам могут понадобиться эти инструменты. По факту,если вы думаете, что вам нужно использовать «Обратный вызов», вам, вероятно, следует немного усерднее посмотреть, может ли Moq делать то, что вы хотите, автоматически.

Я посмотрел и не вижу другого способа реализовать то, что Мне нужно - а именно «фейковый» репозиторий. Может кто-нибудь посоветовать, если что-то мне здесь не хватает? Есть ли способ добиться этого без обратного вызова?

public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        // Arrange
        var mock = ContactRepositoryFake();

        // Act
        mock.Object.AddContact(new Contact() { Name = "bill" });
        mock.Object.AddContact(new Contact() { Name = "jane" });

        // Assert
        Assert.IsTrue(mock.Object.AllContacts.Count() == 2);
    }

    public Mock ContactRepositoryFake()
    {
        var _allContacts = new List();
        var mock = new Mock();
        mock.Setup(x=>x.AddContact(It.IsAny()))
            .Callback((Contact c) =>
                {
                    _allContacts.Add(c);
                });
        mock.Setup(x => x.AllContacts).Returns(_allContacts);
        return mock;

    }
}

public interface IContactRepository
{
    void AddContact(Contact contact);
    IEnumerable AllContacts { get; }
}

public class Contact
{
    public string Name { get; set; }
}

Заранее большое спасибо! Любой другой совет приветствуется: -)

Z

10
задан Kevin Hogg 18 September 2014 в 10:20
поделиться