System.Diagnostics.Contracts.ContractException n'est pas accessible dans mon projet de test. Notez que ce code est purement moi-même déconner avec ma nouvelle copie shiney de Visual Studio, mais je voudrais savoir ce que je fais mal. J'utilise l'édition professionnelle de VS, donc je n'ai pas de vérification statique. Pour continuer à utiliser les contrats de code (ce que j'aime bien), je me suis dit que la seule façon dont ma méthode peut fonctionner est d'attraper l'exception qui est lancée à l'exécution, mais je ne trouve pas cela possible.Comment se fait-il que vous ne puissiez pas attraper les exceptions de contrat de code?
TestMethod
[TestMethod, ExpectedException(typeof(System.Diagnostics.Contracts.ContractException))]
public void returning_a_value_less_than_one_throws_exception()
{
var person = new Person();
person.Number();
}
Méthode
public int Number()
{
Contract.Ensures(Contract.Result<int>() >= 0);
return -1;
}
erreur
Error 1 'System.Diagnostics.Contracts.ContractException' is inaccessible due to its protection level.
Éditer
Après un peu plus de réflexion, je suis arrivé à la conclusion discutée dans les commentaires, ainsi que les suivantes. Étant donné une méthode, si cela avait une exigence qui pourrait être exprimée sous forme de contrat de code, j'écrirais des tests en tant que tels.
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void value_input_must_be_greater_than_zero()
{
// Arrange
var person = new Person();
// Act
person.Number(-1);
}
Ceci garantirait que le contrat fait partie du code et ne sera pas supprimé. Cela nécessiterait que le contrat de code lève réellement l'exception spécifiée. Dans certains cas, cela ne serait pas nécessaire.
Je devrais ajouter ceci ne compile pas, naturellement. – Finglas
Je voudrais vraiment voir NUnit déprécier ExpectedExceptionAttribute. [Exception Asserts] (http://www.nunit.org/index.php?p=exceptionAsserts&r=2.10.10) vous donne beaucoup plus de contrôle. – TrueWill
@TrueWill Votre souhait est enfin devenu réalité avec NUnit 3.0: https://github.com/nunit/nunit/wiki/Breaking-Changes#body –