2009-12-18 4 views
1

У меня есть простой TestMethodКак включать как действительные и недействительные тестовый случай

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> 

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

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

ответ

0

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

+0

Я могу поймать DivideByZeroException исключительные возможности но как я буду подтверждать, что он подходит только для моего неверного тестового примера. Может случиться, что разработчик написал неверный код, и я получаю это исключение для действительных тестовых случаев. Пожалуйста помоги. –

+0

Когда есть деление на 0 когда-либо действительный тестовый пример? – dcp

+0

@dcp, когда вы убедитесь, что ваш код будет генерировать это исключение при делении на ноль. @Pritam вы можете установить некоторую контекстную переменную, информирующую вас о том, что в этом конкретном тестовом файле вы хотите, чтобы это исключение произошло. Это может быть фактический знаменатель, равный нулю. – Pedro

0

Что-то вроде этого:

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 numator = Double.Parse ((string) TestContext.DataRow ["Numerator"]); double denominator = Double.Parse ((string) TestContext.DataRow ["Знаменатель"]); результат объекта = TestContext.DataRow ["ExpectedResult"]; } –

+0

Таким образом, нет необходимости извлекать отдельные тестовые примеры. –

+0

Думаю, вам нужно лучше объяснить свои требования. Техника, которую я вам дал выше, должна работать, насколько можно обрабатывать ожидаемые исключения с помощью нескольких тестов в одном методе. Я не понимаю, что вы здесь ожидаете. – dcp