Замените, как перейти к методу возврата одного элемента из списка? - PullRequest
0 голосов
/ 09 марта 2020

В классе репозитория у меня есть метод, который принимает идентификатор Guid и возвращает ITestList

public ITestList Get(Guid id)
{

}

Как передать любой Id из списка тестов для замены классу репозитория и вернуть указанный c элемент с помощью When и Есть ли способы замены?

var testRespository= Substitute.For<ITestRepository>();

var testList = new List<ITestList>
{
    new TestList{ Id = new Guid("4fa85f64-5717-4562-b3fc-2c963f66afa6"), Name = "Test name 1", Adress = "0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7" },
    new TestList{ Id = new Guid("3fa85f64-5717-4562-b3fc-2c963f66afa6"), Name = "Test name", Address = "0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e4" };
};

1 Ответ

0 голосов
/ 10 марта 2020

В этом случае лучше всего не указывать NSubstitute и кодировать это явно:

public class TestingRepository : ITestRepository {
    private readonly IList<ITestList> data;
    public TestingRepository(IList<ITestList> list) => data = list;
    public ITestList Get(Guid id) => data.First(x => x.Id == id);
}

Это коротко, понятно и не требует, чтобы читатели знали о каких-либо конкретных библиотеках. Поскольку вы хотите, чтобы ваш тестовый репозиторий работал почти как настоящий, я думаю, что в этом контексте имеет смысл использовать реальный класс (а не сгенерированный макет).

Вы также можете использовать библиотеку макетов сделать это, но это немного сложнее (хотя это может быть полезно для более сложных интерфейсов и / или если вы также хотите утверждать, что были получены определенные вызовы). Вот синтаксис NSubstitute для , возвращающего вычисленное значение из функции :

testRespository
    .Get(Arg.Any<Guid>())
    .Returns(x => testList.First(test => test.Id == x.Arg<Guid>()));

Надеюсь, это поможет.

...