2008-10-08 7 views
2

У меня есть много тестов, написанных для части программного обеспечения (которое является БОЛЬШОЙ вещью), но оно было построено по существу как автономный тест на C#. Хотя это работает достаточно хорошо, он страдает несколькими недостатками, и не последним из них является то, что он не использует стандартную структуру тестирования и в конечном итоге требует от человека, выполняющего тест, прокомментировать вызовы тестов, которые не должны выполняться (когда нежелательно запускать весь тестовый набор). Я хотел бы включить его в мой процесс автоматического тестирования.Преобразование тестового приложения для домашнего теста в стандартную единицу тестового фрейма

Я видел, что тестовое издание VS 2008 имеет понятие «общего теста», которое может делать то, что я хочу, но мы не можем тратить деньги на эту версию в настоящее время. Недавно я начал использовать версию VS 2008 Pro.

Эти методы испытаний по знакомой схеме:

  • сделать некоторые настройки для теста.
  • Выполнение теста.
  • Сброс для следующего теста.

Каждый из них возвращает bool (pass/fail) и строку ref для причины сбоя, заполненную, если она терпит неудачу.

С яркой стороны, по крайней мере, методы испытаний согласованы.

Сегодня я сижу здесь, рассматривая подход, который я мог бы предпринять завтра утром, чтобы перенести весь этот тестовый код на испытательную платформу и, честно говоря, я не так уж волнуюсь о идее поиска более 8-9 тыс. Строк теста код вручную для преобразования.

У вас был опыт в таком преобразовании? Есть ли у вас какие-либо советы? Я думаю, что я мог бы застрять в том, что все это делает глобальный поиск/заменяет и сменяет тесты.

Любые мысли?

ответ

4

Если вы используете NUnit (что вам нужно), вам нужно будет создать новый метод тестирования для каждого из ваших текущих методов тестирования. NUnit использует рефлексию для запроса тестового класса для методов, отмеченных атрибутом [Test], который как он строит свой список тестов, отображаемых в пользовательском интерфейсе, а в тестовых классах используется метод NUnit Assert, чтобы указать, прошли ли они или не смогли.

Мне кажется, что если ваши методы испытаний, как последовательно, как вы говорите, все эти методы NUnit будет выглядеть примерно так:

[Test] 
public void MyTest() 
{ 
    string msg; 
    bool result = OldTestClass.MyTest(out msg); 
    if (!result) 
    { 
     Console.WriteLine(msg); 
    } 
    Assert.AreEqual(result, true); 

}

После того, как вы получите, что работать, ваш следующий шаг - написать программу, которая использует отражение, чтобы получить все имена методов тестирования в вашем старом тестовом классе и создает файл .cs, который имеет метод NUnit для каждого из ваших исходных методов тестирования.

Раздражающий, может быть, но не очень болезненный. И вам нужно будет сделать это только один раз.

+0

Спасибо, Роберт. Да, я использовал NUnit с тех пор, как начал писать код на C#, и это спасательная жизнь. Ваше решение отлично работает (я уже написал приложение для преобразования), и я вам большое спасибо! Береги себя! – itsmatt 2008-10-08 01:42:55

1

Вы собираетесь прожить через идиому «Унция профилактики стоит фунта лечения». Это особенно актуально в программировании.

Вы не упоминаете NUnit (который, я думаю, был куплен Microsoft за 2008 год, но не держите меня за это). Есть ли причина, по которой вы не просто использовали NUnit в первую очередь?

+0

Тесты были написаны кем-то, незнакомым с NUnit в то время. Я в восторге от того, что они вообще написали тесты, но моя работа - все это переделано. – itsmatt 2008-10-08 00:46:40