平台中性单元测试?

问题描述:

我很好奇,如果有定义单元测试的平台中立方式。考虑使用Java和C#中的代码库为新集实现定义一些单元测试的任务。例如,我们可能想要测试{3,4,5}相交{4}是{4}。而不是编写这个单元测试两次(一次在我们的Java项目中,一次在我们的C#项目中),最好定义一次测试(可能用XML?),然后让每个运行时自动读取并执行测试。需要在每种语言中完成一些工作来定义应该如何实例化和填充集合,但是似乎我们只需要配置一次这样的细节,当收益不会重复n个单元测试时,这似乎是合理的。平台中性单元测试?

有没有人知道这个目标的语言或框架?

我沿着你描述的方向开发了一些东西,可以让你定义高级测试,然后用C或C++生成测试工具源代码。

http://www.apollo-systems.co.uk/dev/products/

我是否延长它生成C#和Java取决于需求。它主要针对C和C++为首选语言的嵌入式系统市场。

测试规范存储在XML中,我已经定义了一组最小的操作来允许您执行一些有用的操作。开发这个的动机是让你专注于你想测试的东西,而不是编写测试代码。

有几个问题与潜在的框架,这样的平台中立的单元测试:C#和Java的代码段(如,这样的工具将需要知道哪个Java/C#方法或类之间

  • 映射测试给出某种说XML配置文件)
  • 外部库之间的差异(即使你可以让你自己的代码的翻译可以很容易地实现,外部库提供者可能不会 - 甚至很可能不会在意)
  • 语言不同自己

当然,也许人们可以用相当先进和深思熟虑的配置文件来克服这些问题。但后来又提出了另外一个问题 - 是不是还在单元测试我们在做什么?单元测试是严格绑定到代码它正在测试(用同样的语言写成第一首),真的没有聪明的办法再次去这条规则。用XML编写“单元测试”?这听起来不对。

有这么简单的事情要记住 - 单元测试应该是简单而简单的过程。你所要求的方法很可能会使它过于复杂。用相同的语言编写测试很简单 - 毕竟,你应该能够编写实现。引入额外框架引入了学习它的必要性,维护它并处理它可能导致的可能的新问题。

总的来说,针对不同平台的工具的问题总是相同的 - 当这样的工具过于笼统或平台限制过于具体时,会出现这种情况。那就是你必须回退到平台语言/工具本身。所以,尽管它可能听起来很有吸引力非常简单例子(就像你的相交一样),但总的来说我不认为这是值得的。无论如何,你最终都会以混合的方式做东西。