web-dev-qa-db-fra.com

ExpectedException dans nUnit m'a donné une erreur

Je suis nouveau dans l'utilisation des outils de test sur le .NET Framework, je l'ai donc téléchargé à partir de NuGet avec l'aide de ReSharper.

J'utilise ceci Quick Start pour apprendre à utiliser nUnit. Je venais de copier le code et une erreur est survenue sur cet attribut:

[ExpectedException(typeof(InsufficientFundsException))] //it is user defined Exception 

L'erreur est:

Le nom de type ou d'espace de nom 'ExpectedException' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

Pourquoi? Et si j'ai besoin d'une telle fonctionnalité, avec quoi dois-je la remplacer?

37
Basheer AL-MOMANI

Si vous utilisez NUnit 3.0, votre erreur est due au fait que ExpectedExceptionAttributea été supprimé . Vous devriez plutôt utiliser une construction comme Throws Constraint .

Par exemple, le didacticiel que vous avez lié contient ce test:

[Test]
[ExpectedException(typeof(InsufficientFundsException))]
public void TransferWithInsufficientFunds()
{
    Account source = new Account();
    source.Deposit(200m);

    Account destination = new Account();
    destination.Deposit(150m);

    source.TransferFunds(destination, 300m);
}

Pour modifier cela pour fonctionner sous NUnit 3.0, modifiez-le comme suit:

[Test]
public void TransferWithInsufficientFunds()
{
    Account source = new Account();
    source.Deposit(200m);

    Account destination = new Account();
    destination.Deposit(150m);

    Assert.That(() => source.TransferFunds(destination, 300m), 
                Throws.TypeOf<InsufficientFundsException>());
}
64
Patrick Quirk

Je ne sais pas si cela a changé récemment, mais avec NUnit 3.4.0, il fournit Assert.Throws<T>.

[Test] 
public void TransferWithInsufficientFunds() {
    Account source = new Account();
    source.Deposit(200m);

    Account destination = new Account();
    destination.Deposit(150m);

    Assert.Throws<InsufficientFundsException>(() => source.TransferFunds(destination, 300m)); 
}
12
Nathan Smith

Si vous souhaitez toujours utiliser des attributs, considérez ceci:

[TestCase(null, typeof(ArgumentNullException))]
[TestCase("this is invalid", typeof(ArgumentException))]
public void SomeMethod_With_Invalid_Argument(string arg, Type expectedException)
{
    Assert.Throws(expectedException, () => SomeMethod(arg));
}
5
Bertrand