web-dev-qa-db-fra.com

Comment utiliser les assertions Fluent pour tester les exceptions dans les tests d'inégalité?

J'essaie d'écrire un test unitaire pour un opérateur supérieur à celui substitué à l'aide d'assertions Fluent en C #. L'opérateur supérieur à dans cette classe est supposé générer une exception si l'un des objets est null.

Habituellement, lorsque j'utilise Fluent Assertions, j'utilise une expression lambda pour mettre la méthode en action. Je lancerais ensuite l'action et utiliserais action.ShouldThrow<Exception>. Cependant, je ne vois pas comment mettre un opérateur dans une expression lambda.

Je préférerais ne pas utiliser la fonction Assert.Throws() de NUnit, la contrainte Throws ou l'attribut [ExpectedException] Pour des raisons de cohérence.

40
Nathan Bierema

Vous pouvez essayer cette approche.

[Test]
public void GreaterThan_NullAsRhs_ThrowsException()
{
    var lhs = new ClassWithOverriddenOperator();
    var rhs = (ClassWithOverriddenOperator) null;

    Action comparison = () => { var res = lhs > rhs; };

    comparison.Should().Throw<Exception>();
}

Cela ne semble pas assez net. Mais ça marche.

Ou en deux lignes

Func<bool> compare = () => lhs > rhs;
Action act = () => compare();
64
Kote