IronPython для тестирования модулей над С#

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

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

8 ответов

Ответ будет хорошим - вы вводите новое требование для разработчиков.

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

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

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

Есть и другие варианты, а также IronPython, конечно, Boo, являющийся довольно очевидным выбором.


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

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


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

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

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


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

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


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


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

Параметрированные тесты позволяют настраивать тестовые приборы с рядом параметров данных, и поэтому ваши тесты на С# могут оказаться еще более краткими, чем тесты 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);
}


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

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

  • Джон


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

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

Может быть, я тоже должен изучить IronPython.

licensed under cc by-sa 3.0 with attribution.