我需要编写同一个应用程序的两个版本,一个在.NET中,另一个在Java中。 所以我想编写一个测试套件,然后将它用于两个代码库。
您建议我使用哪种测试工具?
答案 0 :(得分:7)
有趣的问题..
我认为,您可以使用Java的JavaUnit实现(最有可能是JUnit)和.NET。但是你的测试代码必须用第三种语言编写,可能是你自己设计的简单DSL测试。该语言将被翻译为Java和C#源文件。
其他选择不是乱用自己的语言并采取现有的语言。例如。 Python具有两种平台的实现:Jython(Java)和IronPython(.NET)。所以你可以用那种语言编写测试。 Python有自己的捆绑xUnit实现:unittest
包。
答案 1 :(得分:4)
Cucumber是编写规范的绝佳框架。规范由步骤定义支持,可以编写步骤定义来驱动.net和java实现。
答案 2 :(得分:4)
在CLR和JVM上运行的语言还有一些其他选项。其中一些已经有自己的单元测试框架。
例如, Ruby 附带Test Unit,并且存在于两个运行时(JRuby和Iron Ruby的源兼容版本中 - 两者都是Ruby 1.8版本兼容。)
如果您还不了解Ruby,那将是学习Ruby的好借口......
答案 3 :(得分:3)
我看到两种策略:
将代码包装在某种服务器中进行测试,以便您可以调用远程测试方法。这将允许您使用任何测试套件。
将测试编写为J#或任何其他可以轻松映射到.NET和Java的语言。这意味着您只需编写测试一次,然后将测试代码“转换”为两个不同的测试框架可以理解的内容。
我建议先尝试第二种方法。它将以更复杂的测试设置为代价,使测试更快。第一种方法可能更简单的设置,但它会使测试更慢,你需要在测试的某个地方启动和拆除服务器。
答案 4 :(得分:3)
我觉得有趣的是,您正在考虑不重复单元测试的工作,而不是应用程序本身。为什么不编写应用程序核心&单位测试说Java然后使用ikvm并且只有C#和Java中的UI级别,并且每个都基于技术分别进行单独的单元测试。 (或Grasshopper如果您是.NET商店?)
答案 5 :(得分:2)
我只是不确定你为什么要在Java和.NET中实现并行实现,并且需要保留2个代码库的冗余。 Python确实提供了一个可编写脚本的测试工具,但每个平台都会有ceveats,即并非所有核心python模块都已移植到java和ipython。
答案 6 :(得分:1)
我是jni4net的作者,JVM和CLR之间的开源内部进程桥。它建立在JNI和PInvoke之上。不需要C / C ++代码。我希望它会对你有所帮助。
答案 7 :(得分:1)
我建议您重新检查问题的粒度。它意味着单元测试,但为什么不进行功能/系统级测试。在这种情况下,FIT成为一种选择。
作为一个例子,我们在Java中有一个客户端 - 服务器应用程序。我们使用FIT作为备用客户端:我们可以指定Html输入文件,并使用一些胶水(也就是固定装置),我们可以点击服务器。
好消息是,这与服务器上的语言无关,而且Html文件可以用作验收测试。
坏消息是FIT仅仅是一个框架:它可能需要很多胶水。此外,必须意识到这些不是单元测试。不仅粒度不同,而且速度也不同。即,从单元测试的角度来看,大量测试可能无法在“正常”时间内运行。 (我们在晚上运行我们的,在CI构建期间只运行一小部分。)
答案 8 :(得分:0)
您可以使用UML对其进行建模,而不是编写应用程序的两个版本 然后使用AndroMDA将您的模型转发到单独的java和.net实现中。
AndroMDA使用的方法促进了单元测试的包含。