Comment se fait que vous ne pouvez pas attraper Contrat de Code exceptions?

Système.Diagnostics.Des contrats.ContractException n'est pas accessible dans mon projet de test. Remarque: ce code est purement moi-même de déconner avec mes shiney nouvelle copie de Visual Studio, mais j'aimerais savoir ce que je fais mal.

Je suis à l'aide de l'édition professionnelle de VS, donc je n'ai pas de vérification statique. Afin de toujours utiliser des contrats de code (que j'aime) j'ai pensé que la seule façon de ma méthode de travail est d'attraper l'exception est levée lors de l'exécution, mais je ne suis pas à trouver ce possible.

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

Erreur De 1 'Système.Diagnostics.Des contrats.ContractException' est inaccessible 
en raison de son niveau de protection.

Modifier

Après certains plus de pensée, je suis venu à la conclusion discuté dans les commentaires, ainsi que les suivants. Étant donné une méthode, si cela avait une exigence qui peut être exprimé dans le Code du formulaire de Contrat, je ferais des tests en tant que tel.

[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void value_input_must_be_greater_than_zero()
{
    //Arrange
    var person = new Person();
    //Act
    person.Number(-1);
}

Cela permettrait de s'assurer que le contrat est une partie du code, il ne sera pas supprimé. Ceci nécessiterait un Contrat de Code pour réellement lancer l'exception spécifiée, cependant. Dans certains cas, cela ne serait pas nécessaire, cependant.

InformationsquelleAutor Finglas | 2010-04-14