2009-12-18 4 views
1

Je simple TestMethodComment inclure les deux cas de test valide et invalide

public double Divide(double numerator, double denominator)  
{ 
    if (denominator == 0) 
    { 
     throw new NullReferenceException("Cannot divide by zero."); 
    } 
    return numerator/denominator; 
} 

Maintenant, mon fichier de données Testcase ressemble à ceci

<TestCase> 
    <Numerator>-2.5</Numerator> 
    <Denominator>1</Denominator> 
    <ExpectedResult>-2.5</ExpectedResult> 
</TestCase> 
<TestCase> 
    <Numerator>55</Numerator> 
    <Denominator>5</Denominator> 
    <ExpectedResult>11</ExpectedResult> 
</TestCase> 
<TestCase> 
    <Numerator>5</Numerator> 
    <Denominator>0</Denominator> 
    <ExpectedResult>DivideByZeroException</ExpectedResult> 
</TestCase> 

Quel devrait être le moyen d'inclure tous ces testcases en une seule méthode de test. Mon problème de base est de gérer la méthode de test d'exception. Je sais que je peux utiliser l'attribut [ExpectedException (typeof (DivideByZeroException)] dans la méthode de test, mais dans ce cas, cette méthode ne convient pas pour les 2 autres csa test

Quelqu'un pourrait m'aider s'il vous plaît comment je peux accueillir tous ces cas de test . en une seule méthode

Répondre

0

vous pouvez attraper le DivideByZeroException à l'intérieur de tester la méthode, puis Assert.Sucess(); (à l'intérieur du bloc catch)

+0

je peux attraper DivideByZeroException excepti sur mais comment je vais confirmer qu'il ne vient que pour mon cas de test invalide. Il se peut que le développeur ait écrit un code erroné et que j'obtienne cette exception pour les cas de test valides. S'il vous plaît aider. –

+0

Quand une division par 0 est-elle un cas de test valide? – dcp

+0

@dcp lorsque vous vous assurez que votre code lancera cette exception en divisant par zéro. @Pritam vous pouvez définir une variable de contexte vous informant que dans ce cas de test spécifique vous voulez que cette exception se produise. Cela peut être le dénominateur réel étant égal à zéro. – Pedro

0

Quelque chose comme ceci:

public void TestQuotients() { 
    try { 
     // do the test which causes divide by 0 
     int x = 0; 
     int y = 10/x; 

     Assert.Fail("should have gotten exception"); 
    } 
    catch (DivideByZeroException e) { 
     // expected behavior 
    } 

    try { 
     // do the next test which causes divide by 0 
     int k = 0; 
     int t = 100/k; 
     Assert.Fail("should have gotten exception"); 
    } 
    catch (DivideByZeroException e) { 
     // expected behavior 
    } 

    // this test doesn't cause exception 
    double x = 100; 
    double y = 10; 
    Assert.AreEqual(10,x/y,"The quotient is wrong."); 
} 
+0

[TestMethod] [DeploymentItem ("\\ DDTTestProject TestData \\ DivisionTest.xml")] [DataSource ("Microsoft.VisualStudio.TestTools.DataSource.XML", "| DataDirectory | \\ DivisionTest.xml", "TestCase", DataAccessMethod.Sequential)] public void TestDivide() { double numérateur = Double.Parse ((chaîne) TestContext.DataRow ["Numérateur"]); double dénominateur = Double.Parse ((chaîne) TestContext.DataRow ["Dénominateur"]); object result = TestContext.DataRow ["ExpectedResult"]; } –

+0

Il n'est donc pas nécessaire d'extraire des cas de test individuels. –

+0

Je pense que vous devez mieux expliquer vos besoins. La technique que je vous ai donnée ci-dessus devrait fonctionner aussi loin que la possibilité de gérer les exceptions attendues avec plusieurs cas de tests dans une seule méthode. Je ne suis pas clair sur ce que vous attendez ici. – dcp

Questions connexes