Макет DbQuery для использования FromSql из модульных тестов - PullRequest
1 голос
/ 08 июля 2019

Я использую EF Core в проекте для получения вызова хранимой процедуры. В моем контексте у меня есть следующее:

public class MyContext : DbContext
{
    public DbQuery<User> UserQuery { get; set; }

    public MyContext(DbContextOptions<MyContext> options) : base(options) { }
}

И я вызываю хранимую процедуру так:

public virtual async Task<User> GetUserAsync(string name)
{
    return await MyContext.Query<User>()
        .FromSql($"EXEC [dbo].[GetUser], @Login = {name}")
        .FirstOrDefaultAsync();
}

Код работает нормально. Мне нужно проверить этот метод в модульных тестах, я использую InMemoryDatabase, чтобы смоделировать мой контекст MyContext следующим образом:

[Fact]
public async Task GetUserAsync_should_return_first_user_with_login_and_password_if_exists()
{
    // Arrange
    var users = new List<User>
    {
        new User()
        {
            Login = "test@outlook.fr",
            Password = "pass1",
        },
    };

    var options = new DbContextOptionsBuilder<MyContext>()
        .UseInMemoryDatabase(databaseName: "BddName")
        .Options;
    var context = new MyContext(options);
    var loginProvider = A.Fake<LoginProvider>(opts => opts.WithArgumentsForConstructor(() => new LoginProvider(context)));


    // Act

    // Assert
    context.Dispose();
}

И я понятия не имею, как я могу установить свой список в результате хранимой процедуры, вызванной из DbQuery. Я пытался следовать этой статье: https://nodogmablog.bryanhogan.net/2017/11/unit-testing-entity-framework-core-stored-procedures/, но она работает только для DbSet, а не для DbQuery. Мне нужны советы для этого случая.

Заранее спасибо.

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