2009-09-25 96 views
7

我需要编写同一个应用程序的两个版本,一个在.NET中,另一个在Java中。 所以我想编写一个测试套件,然后将它用于两个代码库。多语言测试框架

您会建议我使用哪种测试工具?

回答

3

在CLR和JVM上运行的语言还有其他一些选项。其中一些已经有自己的单元测试框架。

例如,红宝石自带Test Unit和存在于源兼容的版本都运行时(JRubyIron Ruby - 这两者都是Ruby的1.8版本兼容)

会是一个很好的借口,学习Ruby的,如果你还不知道它...

+1

说实话,我真的很想找一个借口来学习Ruby.This可能就是这样。我会检查测试单元。 谢谢 – 2009-09-25 15:21:37

3

我看到了两个策略:

  • 裹的代码在某些类型的服务器进行测试,这样你就可以调用方式来远程测试。这将允许您使用任何测试套件。

  • 用J#或任何其他语言编写测试,您可以轻松映射到.NET和Java。这意味着您只需编写一次测试,然后将测试代码“翻译”成两种不同测试框架可以理解的内容。

我建议先尝试第二种方法。以更复杂的测试设置为代价,它将使测试更快。第一种方法可能更容易设置,但它会使测试速度变慢,您需要在测试中的某个地方启动并拆除服务器。

+1

我们主要是一个.NET商店,所以如果我们可以用CLR语言编写测试,那对我们来说很容易。但是,我不想混淆测试代码。理想情况下,我只会写一次测试。 谢谢。 – 2009-09-25 08:12:10

+0

运行一个将代码从一种语言翻译成另一种语言的脚本(当这两种语言非常相似时)并不是“搞乱”:) – 2009-09-25 08:19:09

+0

我想这是可行的,但是,我再一次宁愿不必做编写更多的支持代码。尽管如此,我仍会考虑。 – 2009-09-25 08:38:42

6

有趣的问题..

我认为,你可以使用的xUnit实现针对Java(JUnit的,最有可能的)和.NET。但是你的测试代码必须写成第三种语言,可能是简单的DSL,用于你自己设计的测试。该语言将被转换为Java和C#源文件。

其他选择是不要弄脏自己的语言,并采取一些现有的。例如。 Python具有两种平台的实现:Jython(Java)和IronPython(.NET)。所以你可以用这种语言编写测试。 Python有自己的捆绑xUnit实现:unittest包。

+4

+1我喜欢使用Python的想法 – 2009-09-25 08:01:54

+0

设计我自己的DSL听起来太复杂了,但我认为python方法值得考虑。 谢谢 – 2009-09-25 08:07:09

+0

什么是DSL? – jrharshath 2009-09-25 12:05:56

2

我只是不确定为什么你想要在Java和.NET中实现并行实现,并努力维护2个代码库。 Python确实提供了可编写脚本的测试工具,但是在每个平台上都有ceveats,即并非所有的核心python模块都已经移植到java和ipython。

+0

这是一个商业决定。我们有客户与Java或.NET技术绑定,并且大部分客户不希望我们在他们的服务器上安装外部到他们平台的代码。 – 2009-09-25 08:32:09

2

我觉得有趣的是,你正在寻找不重复单元测试的努力,但不是为应用程序本身。为什么不用Java编写应用程序核心&单元测试,然后使用ikvm,并且只在C#和Java中具有基于技术权限的单独测试的UI级别。 (或者Grasshopper,如果你是.NET商店)?

+0

你说什么是有道理的,但我不确定我是否相信任何第三方工具将代码从一个平台转换到另一个平台。我宁愿控制正在发生的事情。此外,这两个实现*应该是相当简单的。 – 2009-09-25 09:07:56

+0

是否有任何针对这两种环境的中性语言,并支持编译为本地字节码选项? Python或Ruby说?您的客户不需要知道(除非他们想要查看源代码),因为您只需提供编译类和附加库。 – 2009-09-25 10:49:05

3

Cucumber是编写规范的好框架。这些规范由步骤定义支持,可以写入驱动.net和java实现。

+0

听起来很有趣。我会检查出来的。 谢谢 – 2009-09-25 11:20:44

1

我是jni4net的作者,是JVM和CLR之间的开源内部进程桥。它建立在JNI和PInvoke之上。没有C/C++代码需要。我希望它能帮助你。

+0

看来jni4net将无法在linux盒子上工作,这是我的要求之一。 – 2010-04-23 08:26:32

+0

关于Mono的更多信息,请点击: http://zamboch.blogspot.com/2010/04/jni4net-not-yet-on-mono-linux.html 想要与我们分享您的故事来支持您的案例吗? – 2010-04-24 19:24:50

1

我建议重新检查问题的粒度。它意味着单元测试,但为什么不去功能/系统级测试。在这种情况下,FIT成为一种选择。

作为一个例子,我们在Java中有一个客户端 - 服务器应用程序。我们使用FIT作为备用客户端:我们可以指定Html输入文件和一些胶水(又名固件),我们可以打到服务器。

好消息是,这与服务器上的语言无关,并且可以将Html文件用作验收测试。

坏消息是FIT只是一个框架:它可能需要大量的胶水。另外,必须认识到这些不是单元测试。粒度不仅不同,而且速度也不同。即从单元测试的角度来看,大量测试可能无法在“正常”时间内运行。 (我们CI构建过程中在夜间,只有一小部分运行我们的。)

0

而不是编写应用程序的两个版本,你可以在UML建模的情况,
然后用AndroMDA到正向工程模型为独立的Java和。净实现。

AndroMDA使用的方法促进包含单元测试。