c# - test - xunit vs nunit




Assert une exception en utilisant XUnit (2)

L'expression Assert.Throws capturera l'exception et affirmera le type. Cependant, vous appelez la méthode testée en dehors de l'expression d'assert et vous échouez ainsi dans le cas de test.

[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException()
{
    //arrange
    ProfileRepository profiles = new ProfileRepository();
    // act & assert
    Assert.Throws<ArgumentException>(() => profiles.GetSettingsForUserID(""));
}

Si vous voulez suivre AAA, vous pouvez extraire l'action dans sa propre variable

[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException()
{
    //arrange
    ProfileRepository profiles = new ProfileRepository();
    //act
    Action act = () => profiles.GetSettingsForUserID("");
    //assert
    Assert.Throws<ArgumentException>(act);
}

Je suis un débutant à XUnit et Moq. J'ai une méthode qui prend string en 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;
}

Si vous voulez être rigide à propos de 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 .

[Fact]
public void Exception()
{
    Action testCode = () => { throw new InvalidOperationException(); };

    var ex = Record.Exception(testCode);

    Assert.NotNull(ex);
    Assert.IsType<InvalidOperationException>(ex);
}

C'est à vous de choisir le chemin que vous voulez suivre, et les deux chemins sont entièrement pris en charge par ce que xUnit fournit.





xunit