Я новичок в XUnit и Moq. У меня есть метод, который принимает строку в качестве аргумента. Как обработать исключение с помощью XUnit.
[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException() {
//arrange
ProfileRepository profiles = new ProfileRepository();
//act
var result = profiles.GetSettingsForUserID("");
//assert
//The below statement is not working as expected.
Assert.Throws<ArgumentException>(() => profiles.GetSettingsForUserID(""));
}
Тестируемый метод
public IEnumerable<Setting> GetSettingsForUserID(string userid)
{
if (string.IsNullOrWhiteSpace(userid)) throw new ArgumentException("User Id Cannot be null");
var s = profiles.Where(e => e.UserID == userid).SelectMany(e => e.Settings);
return s;
}
c#
unit-testing
xunit
странствующий монах
источник
источник
GetSettingsForUserID("")
до того, как начнете звонитьAssert.Throws
.Assert.Throws
Вызов не может помочь. Я бы посоветовал быть менее жестким в отношении AAA ...Ответы:
Assert.Throws выражение будет ловить исключение и утверждать тип. Однако вы вызываете тестируемый метод вне выражения assert и, таким образом, не выполняете тестовый пример.
Если вы хотите следовать AAA, вы можете извлечь действие в его собственную переменную.
Обратите внимание, как исключение также можно использовать для подробных утверждений режима
источник
async Task act() => await service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
Task act() => service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
то он доволен этим и отлично работает.Если вы действительно хотите быть жесткими в отношении AAA, вы можете использовать Record.Exception из xUnit для захвата исключения на этапе действия.
Затем вы можете делать утверждения на основе зафиксированного исключения на этапе Assert.
Пример этого можно увидеть в тестах xUnits .
Вам решать, по какому пути вы хотите идти, и оба пути полностью поддерживаются тем, что предоставляет xUnit.
источник
var exception = Assert.Throws<InvalidOperationException>(testCode);
и утвержденияexception.Message
? или это просто еще один способ достижения того же?Вы можете подумать о чем-то вроде этого, если хотите придерживаться AAA:
источник