用于C#单元测试的IronPython

时间:2008-12-04 10:21:04

标签: c# python unit-testing ironpython

我们知道Python比任何编译语言都提供了很多生产力。我们有C#编程和&需要在C#本身编写单元测试用例。如果我们看到我们为单元测试编写的代码量大约是原始代码的十倍。

在IronPython而不是C#中编写单元测试用例是否理想?有没有像这样的身体?我写了几个测试用例,看起来很好。但毛茸茸的尖头经理不会接受。

8 个答案:

答案 0 :(得分:6)

Python非常适合UnitTesting C#代码。我们的应用程序是75%的Python和25%的C#(Python.Net),我们的单元测试是100%python。

我发现在Python中使用存根和模拟要容易得多,这可能是使编写有效单元测试的最关键组件之一。

答案 1 :(得分:4)

Will的回答是好的 - 您正在为开发人员引入新的要求。

此外,工具支持是什么样的?我自己没有尝试过这些,但我想知道:

  • 调试失败的单元测试有多容易?
  • 从IDE运行单元测试有多容易? (例如使用ReSharper)
  • 从连续构建服务器自动化单元测试有多容易?

可能所有这些都很好 - 但你应该检查它们并记录结果。

还有其他选项以及IronPython,当然 - Boo是一个相当明显的选择。

答案 2 :(得分:3)

Python是一种比C#简洁得多的语言,实际上可能会降低编写单元测试的障碍,因为仍然有很多开发人员对一般的自动化单元测试有抵抗力。介绍并让他们使用像IronPython这样的语言,通常花费更少的时间在C#中编写等效的代码,这实际上可能会鼓励编写更多的单元测试,这总是一件好事。

另外,通过使用IronPython作为测试代码,您可能最终会为项目提供更少的代码行(LOC),这意味着您可能更长时间地维护单元测试而不是忽略和/或丢弃。

答案 3 :(得分:3)

实际上,测试是尝试集成新语言的绝佳机会。像Python这样的语言在测试中表现得尤为突出,这是一个低风险的项目 - 最糟糕的情况并不是太糟糕。

就使用Python测试另一种语言的经验而言,我已经测试了这样的C和C ++系统,它非常出色。我认为这绝对值得一试。

Jon说的是真的 - 一般来说,Python的工具级别,特别是IronPython,远不及C#的工具级别。对你有多大影响是你在飞行员身上发现的。

答案 4 :(得分:2)

有一个显而易见的缺点,现在每个处理代码的人都需要精通两种语言,而不仅仅是一种语言。我有点毛茸茸,但不是很尖,但我确实明白为什么经理可能会持怀疑态度。

答案 5 :(得分:1)

我在mbUnitNUnit发现参数化测试后,最近一直在重新评估我的测试态度。以前,我推荐使用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);
}

答案 6 :(得分:0)

非常有趣。

如果您使用IronPython编写所有代码(而不仅仅是单元测试)会发生什么?你最终会减少大约10倍的代码吗?

也许我也应该学习IronPython。

答案 7 :(得分:0)

我得和Will和Jon一起去......

我希望我的测试与我正在测试的代码使用相同的语言;它导致更少的认知上下文切换。但也许我不像以前那样精神敏捷。

  • 乔恩