2009-06-29 8 views
2

J'aime vraiment nouveau de NUnit capacité (er) à tester pour les essais d'exception prévue, à savoir:nunit ReSharper prévu des essais d'exception

var ex = Assert.Throws<SomeException>(()=>methodToThrowException("blah")); 

Un problème mineur, je trouve que pour tester une sorte de surcharge de l'opérateur ou une autre affectation fonctionnalité de type, la seule façon que je peux savoir comment faire cela est en donnant le compilateur une variable à assigner à, comme ceci:

// test division operator "/" 
var ex = Assert.Throws<PreconditionException>(() => { var ignored = nbr/m; }); 

C'est compact et fonctionne très bien, mais il a l'ennui où ReSharper met un avertissement que la variable ignorée n'est jamais utilisée. Ceci est contre-productif si vous aimez utiliser les visuels Resharper pour vous aider à juger la qualité du code d'un coup d'œil, comme je le fais. Resharper est techniquement correct, bien sûr, mais y a-t-il un moyen de dire à Resharper que c'est mon intention? J'ai un test avec beaucoup de ces sortes de tests, donc un pragma aura l'air méchant.

Des suggestions (en plus de "surmonter, mec")?

Vive

Répondre

4

Ajouter un champ à l'épreuve de l'unité et supprimer l'avertissement, à savoir:

// ReSharper disable UnaccessedField.Local 
     private object _ignore; 
// ReSharper restore UnaccessedField.Local 

L'utilisation ce champ comme la variable d'affectation dans votre délégué de test:

// test division operator "/" 
var ex = Assert.Throws<PreconditionException>(() => { _ignore = nbr/m; }); 

Cela permet de maintenir ReSharper calme, vous savez si elle ne se plaint de quelque chose maintenant, il est probablement une plainte légitime qui devrait être examinée. Cela élimine le niveau de bruit pour que vous puissiez vous concentrer (j'ai plus de 50 tests comme celui-ci dans une classe importante qui nécessite un refactoring).

Cheers, Berryl

4

Vous pouvez écrire votre propre méthode Throws qui prend Func<object> place, puis il suffit d'écrire:

var ex = Assert.Throws<PreconditionException>(() => nbr/m); 

ensuite soumettre la nouvelle méthode pour NUnit et attendre la prochaine version :)

0

Et il est vraiment bien, vous pouvez obtenir l'exception et de travailler avec elle ...

var exception = Assert.Throws<ArgumentException>(() => dlinvalid.ProcessData()); 
Assert.That(exception.Message, Is.EqualTo("foo bar"), "Expected bar foo"); 

De plus, il travaille avec ReSharper, alors que ExpectedException semble avoir échoué avec NUnit 2.5