#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()
в вашем тесте, поэтому в целом он не будет работать.