2009-12-18 7 views
4

J'ai un test unitaire qui échoue parce qu'un System.ArgumentException est être jeté, même si je attends et son comportement délibéré - qu'ai-je manqué?NUnit Test Unit a « ExpectedException » mais à défaut sur exception

[Test] 
[ExpectedException(typeof(ArgumentException), ExpectedMessage = "Seconds from midnight cannot be more than 86400 in 010100712386401000000012")] 
public void TestParsingCustomReferenceWithInValidSecondsFromMidnight() 
{ 
    // I am expecting this method to throw an ArgumentException: 
    CustomReference.Parse("010100712386401000000012"); 
} 

J'ai également essayé sans le ExpectedMessage étant réglé - aucune différence.

Répondre

6

Avez-vous essayé la syntaxe d'assertion?

Assert.Throws<ArgumentException>(
    () => CustomReference.Parse("010100712386401000000012"), 
    "Seconds from midnight cannot be more than 86400 in 010100712386401000000012" 
); 
2

Le message attendu est-il correct? Est-ce le exact même message que CustomReference.Parse (chaîne) lance? Par exemple, c'est et non ce qui est affiché dans la console NUnit.

Je ne saurais pas une autre raison pour laquelle cela ne fonctionnerait pas. Quelle version de NUnit utilisez-vous?

+0

2.5.2.9222. Chose est, je l'ai essayé sans le message attendu, aussi - même problème. :( –

+1

Hmm étrange, cela fonctionne pour moi sur la version 2.4.8 Peut-être est-il cassé dans la dernière version ... – Razzie

1

Que se passe-t-il si vous faites cela?

[TestFixture] 
public class CustomReferenceTests 
{ 
    [Test] 
    [ExpectedException(typeof(ArgumentException))] 
    public void TestParsingCustomReferenceWithInValidSecondsFromMidnight() 
    { 
     // I am expecting this method to throw an ArgumentException: 
     CustomReference.Parse("010100712386401000000012"); 
    } 

    [Test] 
    [ExpectedException(typeof(ArgumentException), ExpectedMessage = "Seconds from midnight cannot be more than 86400 in 010100712386401000000012")] 
    public void TestParsingCustomReferenceWithInValidSecondsFromMidnightWithExpectedMessage() 
    { 
     // I am expecting this method to throw an ArgumentException: 
     CustomReference.Parse("010100712386401000000012"); 
    } 
} 

public class CustomReference 
{ 
    public static void Parse(string s) 
    { 
     throw new ArgumentException("Seconds from midnight cannot be more than 86400 in 010100712386401000000012"); 
    } 
}