Jestem nowicjuszem w XUnit i Moq. Mam metodę, która przyjmuje ciąg jako argument. Jak obsłużyć wyjątek za pomocą 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(""));
}
Testowana metoda
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
wandermonk
źródło
źródło
GetSettingsForUserID("")
zanim zaczniesz dzwonićAssert.Throws
.Assert.Throws
Połączenie nie może pomóc tam. Proponuję być mniej sztywnym w kwestii AAA ...Odpowiedzi:
Assert.Throws wyrażenie złapie wyjątek i dochodzić typ. Jednak wywołujesz testowaną metodę poza wyrażeniem assert, co powoduje niepowodzenie przypadku testowego.
Jeśli zdecydujesz się podążać za AAA, możesz wyodrębnić akcję do własnej zmiennej.
Zwróć uwagę, jak wyjątek może być również używany dla szczegółowych potwierdzeń trybu
źródło
async Task act() => await service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
Task act() => service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
to jest z tego zadowolony i działa dobrze.Jeśli chcesz być sztywny w kwestii AAA, możesz użyć Record.Exception z xUnit, aby uchwycić wyjątek na etapie aktu.
Następnie można tworzyć potwierdzenia na podstawie przechwyconego wyjątku na etapie Assert.
Przykład tego można zobaczyć w testach xUnits .
To od Ciebie zależy, jaką ścieżką chcesz podążać, a obie ścieżki są w pełni obsługiwane przez to, co zapewnia xUnit.
źródło
var exception = Assert.Throws<InvalidOperationException>(testCode);
i potwierdzaniaexception.Message
? czy jest to po prostu kolejny smak osiągnięcia tego samego?Możesz rozważyć coś takiego, jeśli chcesz trzymać się AAA:
źródło