Как сделать базовую библиотеку net с функциями usermanager - PullRequest
1 голос
/ 13 июля 2020

Я снова наткнулся на проблему. Ну, это не настоящая проблема, это скорее то, чему я хочу научиться. Я хочу начать изучение библиотек классов для ядра. net. Сначала я создал проект библиотеки классов с правильными настройками. Теперь я хочу создать функции, которые используют, например,

applicationusermanager

. Я понятия не имею, как получить доступ к applicationusermanager из другого моего проекта. Пока я читал несколько сообщений, я увидел, что это как-то связано с зависимостями. Еще раз, я понятия не имею, возможно ли это вообще или как следует начинать.

Допустим, например, у меня есть такая библиотечная функция:

public static async Task<ApplicationUser> Get_User_Test()
    {
        return await _usermanager.FindByEmailAsync("test@test.com");
    }

Я хочу, чтобы эта функция запустить в моем основном проекте. Я вызываю это, выполняя library.Get_User_Test();, но это не удается.

Некоторые хорошие статьи или предложения будут оценены. Я просто не знаю, с чего начать.

Надеюсь, у вас все хорошо и вы здоровы. Спасибо, что прочитали это, и sh вам хорошего дня.

С уважением,

Ник

1 Ответ

0 голосов
/ 13 июля 2020

UserManager provides the APIs for managing user in a persistence store. Это чистая часть ASP.NET Core Identity, обеспечивающая все логики аутентификации / авторизации c, когда вы работаете с. NET Core. Это сквозной лог c, поэтому вы не хотите тестировать себя. Единственное, что вы выполняете Unit Test, - это ваш собственный IUserStore, когда вы решите интегрировать базу данных без Entity Framework Core здесь .

Вы можете представить, что UserManager будет вызывать каждый реализованный метод в вашем реализованном классе IUserStore. Поскольку это ваш собственный код, вы должны написать для этого UT.

Есть образец кода.

public class MongoUserStore : IUserStore<ApplicationUser>
{
    private readonly IUserRepository _userRepo;
    public MongoUserStore(IUserRepository userRepo)
    {
        _userRepo = userRepo;
    }

    public async Task<User> FindByIdAsync(string userId, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var user = await _userRepo.GetOneAsync(userId);
            if (user != null)
            {
                return user;
            }

            return null;
        }
}

Затем вам нужно написать UT для этого класса

public class Test
{
    [Fact]
    public async Task Find_By_Id_Test()
    {
        // Arrange
        // Your mock here
        var mockMongoUserStore = Mock<IUserStore<ApplicationUser>>();
        // Act
        var user = await mockMongoUserStore.FindByIdAsync("abc", null);
        // Assert
        Assert.True(user != null);
    }
}

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