2013-03-18 6 views
1

Я написал тестовый пример с Microsoft.VisualStudio.TestTools.UnitTesting, итерации через большое количество тестовых примеров, которые хранятся в текстовом файле на диске. Как только один из тестовых примеров приведет к сбою «единичного теста», метод Assert, который я использую (AreEqual или Fail), возвращает ErrorMessage, содержащий детали неудавшегося случая. Это здорово, однако, я хочу, чтобы мой код продолжал выполнять все тестовые примеры, даже если есть один случай, который терпит неудачу, поэтому я могу видеть детали всех неудачных случаев.Метод одиночных испытаний для большого набора данных

Насколько я понимаю из моего исследования, это не обязательно является единичным тестом в соответствии с определением в Unit testing large data sets?, поэтому я также могу предложить альтернативные предложения по решению этой проблемы, а не только те, которые связаны с Microsoft.VisualStudio.TestTools.UnitTesting или модульной схемой тестирования.

ответ

3

Существует концепция под названием Data Driven Test. Я использовал его в NUnit, но есть способ doing it in Visual Studio Unit testing.

Это создает один тест на каждую строку данных, а не один тест для всего набора данных. Это запустит тест для всего вашего набора данных и продолжит следующий элемент данных даже при сбое. Конечный результат будет подчеркивать неудачу и успех в каждом случае.

+1

Вау, это именно то, что я искал. Я просто работал с CSV-файлом в качестве источника данных. Теперь я могу видеть, как деталь из 73 моих тестов запускается одним ударом. Brilliant! Единственное разочарование: я только что обнаружил, что NCrunch не поддерживает тесты, основанные на MSTest-данных ... – Aligma

+0

Да, похоже, есть тема для теста данных NCrunch-Mstest, установленного в [Форумы NCrunch] (http://forum.ncrunch.net /yaf_postst180_ETA-of-MSTest-data-driven-tests.aspx). Везет, как утопленнику. Я предполагаю, что у вас есть сценарии, которые запускают тесты, и в этом случае вы также должны их охватить. –

2

Что-то, что я делал в прошлом, это создать шаблон , чтобы создать мои тесты из источника данных. Обычно CSV-файл тестов. Чтобы (повторно) сгенерировать все, что вам нужно сделать, это открыть файл TT и сохранить его для восстановления - или использовать инструмент VS.

Это имеет то преимущество, что у каждого теста есть только один тест, и он также даст вам легко повторяемые тесты, даже если они сгенерированы для вас. Вы также можете легко отлаживать тесты с ошибкой, потому что код C# в конце дня.

Например создать * .TT с этим содержанием и имеют CSV файл с некоторыми данными:

<#@ template debug="false" hostspecific="true" language="C#" #> 
<#@ assembly name="System.Core" #> 
<#@ import namespace="System.IO" #> 
<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Collections.Generic" #> 
<#@ output extension=".generated.cs" #> 
<# 
    var testCases = 
     File.ReadAllLines(Path.Combine(Host.TemplateFile, @"Cases.csv")) 
     .Skip(1) //Headers 
     .Select(line => line.Split(',')) 
     .Select(
      values => 
       new 
       { 
        TestName = values[0], 
        Expected = values[1], 
        Actual = values[2], 
        //More Stuff from values[n] 
       }); 
#> 
using System; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 

namespace DaveShaw 
{ 
    [TestClass] 
    public class GeneratedTests 
    { 
<# 
    foreach (var testCase in testCases) 
    { 
#> 
     [TestMethod] 
     public void Generated_<#= testCase.Name #>() 
     { 
      //Put your Arrange & Act code here 
      Assert.AreEqual(
       expected: <#= testCase.Expected #> 
       actual: <#= testCase.Expected #>); 
     } 
<# 
    } 
#> 
    } 
} 

При сохранении вы будете иметь * .generated.cs (где * то же самое, * .tt) со всеми вашими испытаниями там.

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