Je suis un débutant sur XUnit et Moq. J'ai une méthode qui prend la chaîne comme argument. Comment gérer une exception en utilisant 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(""));
}
Méthode sous test
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
la source
la source
GetSettingsForUserID("")
avant de commencer à appelerAssert.Throws
. L'Assert.Throws
appel ne peut pas vous y aider. Je suggérerais d'être moins rigide à propos de AAA ...Réponses:
L' expression Assert.Throws interceptera l'exception et affirmera le type. Cependant, vous appelez la méthode testée en dehors de l'expression d'assert et échouez ainsi au scénario de test.
Si vous êtes déterminé à suivre AAA, vous pouvez extraire l'action dans sa propre variable.
Notez comment l'exception peut également être utilisée pour les assertions détaillées de mode
la source
async Task act() => await service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
Task act() => service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
c'est satisfait et fonctionne bien.Si vous voulez être rigide sur AAA, vous pouvez utiliser Record.Exception de xUnit pour capturer l'exception dans votre étape Act.
Vous pouvez ensuite faire des assertions en fonction de l'exception capturée à l'étape Assert.
Un exemple de ceci peut être vu dans les tests xUnits .
C'est à vous de décider du chemin que vous souhaitez suivre, et les deux chemins sont entièrement pris en charge par ce que propose xUnit.
la source
var exception = Assert.Throws<InvalidOperationException>(testCode);
et de l'affirmationexception.Message
? ou est-ce juste une autre saveur de réaliser la même chose?Vous pourriez envisager quelque chose comme ceci si vous voulez vous en tenir à AAA:
la source