IronPython для модульного тестирования на C # - PullRequest
13 голосов
/ 04 декабря 2008

Мы знаем, что Python обеспечивает большую производительность по сравнению с любыми скомпилированными языками. У нас есть программирование на C #, и нам нужно написать примеры модульных тестов на самом C #. Если мы увидим объем кода, который мы пишем для модульного теста, примерно в десять раз больше, чем исходный код.

Является ли идеальным выбором для написания модульных тестов в IronPython вместо C #? Любое тело сделало так? Я написал несколько тестовых случаев, они кажутся хорошими. Но волосатые заостренные менеджеры не примут.

Ответы [ 8 ]

6 голосов
/ 07 декабря 2008

Python отлично подходит для кода UnitTesting C #. Наше приложение на 75% в Python и 25% на C # (Python.Net), а наши модульные тесты на 100% на Python.

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

4 голосов
/ 04 декабря 2008

Хороший ответ Уилла - вы вводите новое требование для разработчиков.

Кроме того, на что похожа поддержка инструмента? Я не пробовал ничего из этого, но хотел бы знать:

  • Насколько легко отладить неудачные юнит-тесты?
  • Насколько просто запускать модульные тесты из IDE? (например, с помощью ReSharper)
  • Насколько просто автоматизировать модульные тесты с сервера непрерывной сборки?

Возможно, все это хорошо, но вы должны проверить их и задокументировать результаты.

Конечно, есть и другие варианты, кроме IronPython - Boo является довольно очевидным выбором.

3 голосов
/ 05 декабря 2008

На самом деле тестирование - это прекрасная возможность попробовать интегрировать новый язык. Такие языки, как Python, особенно хороши в тестировании, и это проект с низким уровнем риска, который можно попробовать - в худшем случае это совсем не плохо.

Что касается опыта тестирования другого языка в Python, я тестировал такие системы C и C ++, и это было превосходно. Я думаю, что это определенно стоит того.

Однако то, что говорит Джон, верно - уровень инструментов для Python в целом и для IronPython в частности далеко не такой, как в C #. Как сильно это влияет на тебя, ты узнаешь у своего пилота.

3 голосов
/ 04 декабря 2008

Python, будучи гораздо менее многословным языком, чем C #, на самом деле может снизить барьер для написания модульных тестов, так как все еще есть много разработчиков, которые вообще не хотят выполнять автоматическое модульное тестирование. Знакомство с ними и использование такого языка, как IronPython, который обычно тратит меньше времени на написание эквивалентного кода на C #, может на самом деле побудить писать больше модульных тестов, что всегда хорошо.

Кроме того, используя IronPython для своего тестового кода, вы можете получить меньше строк кода (LOC) для всего проекта, что означает, что ваши долгосрочные тесты с большей вероятностью будут поддерживаться в долгосрочной перспективе, а не игнорироваться и / или выброшены.

2 голосов
/ 04 декабря 2008

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

1 голос
/ 08 июня 2010

Я недавно переоценил свои установки тестирования после обнаружения параметризованного тестирования в mbUnit и NUnit . Ранее я рекомендовал Python unittest как способ автоматизации любого возможного тестирования из-за краткого характера и доступности тестов.

Параметризованные тесты позволяют настраивать тестовые приборы с диапазоном параметров данных, и поэтому ваши тесты на C # могут оказаться даже более краткими, чем тесты Python.

[TestCase(12, 3, 4)]
[TestCase(12, 2, 6)]
[TestCase(12, 4, 3)]
[TestCase(12, 0, 0, ExpectedException = typeof(System.DivideByZeroException),
      TestName = “DivisionByZeroThrowsExceptionType”)]
[TestCase(12, 0, 0, ExpectedExceptionName = “System.DivideByZeroException”,
      TestName = “DivisionByZeroThrowsNamedException”)]
public void IntegerDivisionWithResultPassedToTest(int n, int d, int q)
{
      Assert.AreEqual(q, n / d);
}
0 голосов
/ 14 января 2009

Мне нужно идти с Уиллом и Джоном ..

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

  • Jon
0 голосов
/ 05 декабря 2008

Очень интересно.

Что произойдет, если вы напишите весь свой код с помощью IronPython (не только модульные тесты)? Вы бы в итоге получили примерно в 10 раз меньше кода?

Может быть, мне тоже стоит изучить IronPython.

...