2016-11-04 12 views
1

У меня есть DataSource в XML-файл (SumTestData.xml), как показано нижеВозможно ли создать (динамически) другой тестовый пример для различной итерации (значение данных) источника данных?

<Rows> 
<Row> 
    <A1>1</A1> 
    <A2>1</A2> 
    <Result>2</Result> 
</Row> 
<Row> 
    <A1>1</A1> 
    <A2>2</A2> 
    <Result>3</Result> 
</Row> 
<Row> 
    <A1>1</A1> 
    <A2>-1</A2> 
    <Result>1</Result> 
</Row> 

Сейчас я использую его в моем ниже методе испытания

[TestMethod] 
[DeploymentItem("ProjectName\\SumTestData.xml")] 
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML","|DataDirectory|\\SumTestData.xml","Row",DataAccessMethod.Sequential)] 

public void SumTest() 
{ 

    int a1 = Int32.Parse((string)TestContext.DataRow["A1"]); 
    int a2 = Int32.Parse((string)TestContext.DataRow["A2"]); 
    int result = Int32.Parse((string)TestContext.DataRow["Result"]); 
    ExecSumTest(a1, a2, result); 
} 

Когда я исполняю [TestMethod ] В проводнике тестов я вижу только один тестовый пример: возможно ли создать (динамически) другой тестовый пример для разных итераций (значение данных) источника данных? Согласно моему источнику данных, он имеет три значения: Да. Очень важно, чтобы Test Explorer рассматривал его как один тестовый пример, но для меня есть три тестовых примера. Есть ли способ сделать или создать динамически тестовые примеры, которые можно увидеть в тестовом приложении в качестве трех тестовых примеров вместо одного набора, я сомневаюсь, но надеюсь, что здесь ответят

ответ

0

С MSTest вы всегда увидите один тестовый пример для управляемых данными метод испытания (даже с ReSharper в Test Explorer, или Unit Test Sessions)

Однако, если вы используете тесты NUnit, вы можете увидеть тестовые случаи для каждой строки:

using System; 
using NUnit.Framework; 

namespace MyTests 
{ 
    public class MyTestClass 
    { 
     private static object[] myDataSource => new object[] 
      { 
       new object[] { 1, 1, 2 }, 
       new object[] { 1, 2, 3 }, 
       new object[] { 1, -1, 1 }, 
      } 

     [TestCaseSource(nameof(myDataSource))] 
     public void MyTestMethod(int a1, int a2, int result) 
     { 
      ExecSumTest(a1, a2, result); 
     } 
    } 
} 

в качестве альтернативы, если все аргументы являются константами, вы можете использовать атрибут TestCase. Вы даже можете определить собственное имя для строк:

using System; 
using NUnit.Framework; 

namespace MyTests 
{ 
    public class MyTestClass 
    { 
     [TestCase(1, 1, 2, TestName = "Custom name of the first row")] 
     [TestCase(1, 2, 3)] 
     [TestCase(1, -1, 1)] 
     public void MyTestMethod(int a1, int a2, int result) 
     { 
      ExecSumTest(a1, a2, result); 
     } 
    } 
} 
+0

Итак, любое другое решение для Test Explorer? – user3652040

+0

Я поддержал вас, потому что это было проблемой для меня. К сожалению, MSTest не будет показывать несколько случаев для вас даже в Visual Studio 2015. Может быть, это потому, что источником данных может быть и база данных, и она не может быть оценена статически, но во время выполнения. NUnit не только лучше в этом отношении, но, как вы можете видеть, тесты, управляемые данными, гораздо более компактны и удобны в обслуживании. ReSharper поддерживает как MSTest, так и NUnit, но показывает случаи подтестов только для NUnit ... :( – taffer

+0

есть ли какое-либо прямое/косвенное (оболочное) решение для Test Explorer? – user3652040

 Смежные вопросы

  • Нет связанных вопросов^_^