Модульный тест с Nsubstitute всегда возвращает нуль с лямбда-выражением в шаблоне репозитория. - PullRequest
0 голосов
/ 27 июня 2019

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

Я пробовал использовать оба варианта ниже, ноповедение такое же (возвращаемое значение NULL):

Repository.FindAsync<User>(Arg.Is<Expression<Func<User, bool>>>(x => x.Email == "Test")).Returns(new User() { FirstName = "Test"});

и

Repository.FindAsync<User>(x => x.Email == "Test").Returns(new User() { FirstName = "Test"});

Я вставляю весь код моего модульного теста

public class WhenTestingUser : WhenTesting<Customer>
{
    private IRepository Repository { get; set; }

    protected override void Given()
    {
        Repository = Fixture.Freeze<IRepository>();

        Repository.Find<User>(Arg.Any<Expression<Func<User, bool>>>()).ReturnsNull();

        Repository.FindAsync<User>(Arg.Is<Expression<Func<User, bool>>>(x => x.Email == "Test")).Returns(new User() { FirstName = "Test"});


    }

    protected override void When()
    {

        SystemUnderTest.UpdateUser().GetAwaiter();

    }

    [Test]
    public void WhenCalled()
    {
        throw new NotImplementedException();
    }
}

Я работаюс AutoFixture.AutoNSubstitute, NSubstite и NUnit

1 Ответ

0 голосов
/ 28 июня 2019

Решение:

[Test]
public void TestUnprocessedInvoicesByCatchingExpression()
{
    Expression<Func<InvoiceDTO, bool>> queryUsed = null;
    IList<InvoiceDTO> expectedResults = new List<InvoiceDTO>();
    _invoiceRepository
    .Find(i => true)
    .ReturnsForAnyArgs(x =>
    {
        queryUsed = (Expression<Func<InvoiceDTO, bool>>)x[0];
        return expectedResults;
    });

    Assert.That(_sut.GetUnprocessedInvoices(), Is.SameAs(expectedResults));
    AssertQueryPassesFor(queryUsed, new InvoiceDTO { IsProcessed = false, IsConfirmed = true });
    AssertQueryFailsFor(queryUsed, new InvoiceDTO { IsProcessed = true, IsConfirmed = true });
}

NSubstitute - тестирование определенного выражения linq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...