Как включить как действительный, так и недействительный тест-кейс - PullRequest
1 голос
/ 18 декабря 2009

У меня есть простой метод испытаний

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

Теперь мой файл данных Testcase выглядит следующим образом

<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>

Каким должен быть способ включить все эти тестовые случаи в один метод тестирования. Моя основная проблема - обработать метод проверки исключений. Я знаю, что могу использовать атрибут [ExpectedException (typeof (DivideByZeroException)]) в методе испытаний, но в этом случае этот метод не подойдет для других 2 тестовых csaes.

Может ли кто-нибудь помочь мне, как я могу объединить все эти контрольные примеры в один метод.

Ответы [ 2 ]

0 голосов
/ 18 декабря 2009

Примерно так:

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 голосов
/ 18 декабря 2009

Вы можете поймать DivideByZeroException внутри вашего метода тестирования, а затем Assert.Sucess(); (внутри блока catch)

...