Модульное тестирование метода c# с использованием Moq

#c# #unit-testing #moq

Вопрос:

Я новичок в модульном тестировании и языке c sharp, и я пытаюсь выполнить модульное тестирование, издеваясь ISessionStorageService HasGlobaladminaccess над функцией, но моя настройка, похоже, работает не так, как ожидалось.

 public class Context
{
    public asyncTask<bool>HasGlobalAdminAccessAsync(Blazored.SessionStorage.ISessionStorageService sessionStorage)
    {
        return await HasAccessAsync(sessionStorage, Config.Constants.HAS_GLOBALE_ADMIN_ACCESS);
    }

    private async Task<bool> HasAccessAsync(Blazored.SessionStorage.ISessionStorageService sessionStorage, string sessionStorageKey)
    {
        ILogger _logger = Log.ForContext<ContextHelpers>();

        try
        {
            _logger.Debug("HasAccessAsync({sessionStorageKey})", sessionStorageKey);
            var access = await sessionStorage.GetItemAsync<bool>(sessionStorageKey);
            _logger.Debug("HasAccessAsync({sessionStorageKey})::access={access}", sessionStorageKey, access);
            return access;
        }
        catch (Exception ex)
        {
            _logger.Debug("HasAccessAsync({sessionStorageKey})::exception={ex}", sessionStorageKey, ex.Message);
            return false;
        }
    }
}
 

Мой метод тестирования

 private readonly Mock<ISessionStorageService> MockStorage = new Mock<ISessionStorageService>();

[Fact()]
public async Task HasGlobalAdminAccessAsyncTest()
{
    string guid = System.Guid.NewGuid().ToString();
    Context context = new Context();
    MockStorage.Setup(foo => foo.GetItemAsync<bool>(guid)).ReturnsAsync(true);
    var person = await context.HasGlobalAdminAccessAsync(MockStorage.Object);
    Assert.True(person , guid);
}
 

Комментарии:

1. Что вы хотите проверить с помощью этой строки: Assert.True(person, guid) ?

Ответ №1:

Либо используйте то же значение, что Config.Constants.HAS_GLOBALE_ADMIN_ACCESS и для значения GUID в вашем тесте

Или использовать

 foo => foo.GetItemAsync<bool>(It.IsAny<Guid>())
 

По твоему Setup зову.

Как написано, у вас есть набор тестов, который принимает только точный идентификатор GUID, возвращаемый Guid.NewGuid() в вашем тесте, поэтому в целом он не будет работать.