13

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

用 IronPython 而不是 C# 编写单元测试用例是理想的选择吗?有没有机构做过这样的事?我写了几个测试用例,它们似乎很好。但毛茸茸的尖尖经理不会接受。

4

8 回答 8

6

Python 非常适合对 C# 代码进行单元测试。我们的应用程序 75% 使用 Python,25% 使用 C#(Python.Net),我们的单元测试 100% 使用 Python。

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

于 2008-12-06T22:28:16.257 回答
4

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

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

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

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

当然,除了 IronPython 之外,还有其他选项 - Boo是一个相当明显的选择。

于 2008-12-04T10:36:19.440 回答
3

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

另外,通过将 IronPython 用于您的测试代码,您最终可能会为您的项目整体减少代码行数 (LOC),这意味着您的单元测试更有可能在长期内得到维护,而不是被忽略和/或丢弃。

于 2008-12-04T18:57:17.963 回答
3

实际上,测试是尝试集成新语言的绝佳机会。像 Python 这样的语言在测试中表现得特别好,这是一个低风险的项目尝试——最坏的情况一点也不差。

就在 Python 中测试另一种语言的经验而言,我已经测试过这样的 C 和 C++ 系统,并且非常出色。我认为这绝对值得一试。

然而,Jon 说的是真的——Python 的工具水平,特别是 IronPython 的水平,远不及 C# 的水平。这对你的影响有多大,你会在你的飞行员中发现。

于 2008-12-05T00:04:30.853 回答
2

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

于 2008-12-04T10:29:38.407 回答
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);
}
于 2010-06-08T04:17:27.230 回答
0

很有意思。

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

也许我也应该学习 IronPython。

于 2008-12-04T23:36:58.303 回答
0

我得和威尔和乔恩一起去..

我希望我的测试与我正在测试的代码使用相同的语言;它导致更少的认知上下文切换。但也许我只是不像以前那样头脑灵活了。

  • 乔恩
于 2009-01-14T17:41:30.910 回答