在构建过程中集成系统测试

时间:2010-06-14 17:43:44

标签: java testing maven-2 system-testing

我正在继续开发序列化层生成器。用户输入类型的描述(当前在XSD或WSDL中),并且软件以某种目标语言(当前,Java和ansi C89)生成代码,该代码能够表示所描述的类型并且还能够序列化(变成一个字节序列)并反序列化这些值。

因为生成代码很棘手(我的意思是,编写代码很难。编写编写代码的代码编写代码来做一件难事,这是一个全新的硬度:))。因此,在我的硕士论文之前的项目中,我们决定要进行一些系统测试。

这些系统测试知道一对类型和多对值和字节序列。为了以某种语言执行系统测试,类型通过系统运行,产生如上所述的代码。然后将该代码与一些手写主机代码链接,该代码能够读取这些字节序列和值的对,并且用于从字符串中读取给定值的值。然后运行生成的可执行文件,并将字节值对提供给此可执行文件,并且如果所有这样的绑定都导致输出“Y”,则进行全面检查。如果是这种情况,那么该类型的这些示例值序列化为先前定义的字节序列,并且我们可以得出结论,生成的代码编译并正确运行,因此,总体而言,处理此类型的系统部分是正确的。这是一件非常好的事情。

但是,现在我对目前的实施有点不满意。目前,我编写了一个自定义junit运行器,它使用了大量的反射法术,以便从类属性中读取这些字节值绑定。此外,生成代码的整个堆栈需要大量的样板代码和样板代码类,它们只需要包含两个或三个字符串。更糟糕的是,很难与基于Junits描述并生成测试失败报告的所有工具进行良好集成。如果有用的maven Junit testrunner或eclipse测试运行器吞噬了编译器抛出的任何错误,实际调试正在发生的事情是很困难的,因为这个错误的格式与junits自己的断言错误不同。

更糟糕的是,生成的代码中的单个失败测试会导致maven构建失败。这非常烦人。如果maven构建失败,如果某个不同单元的某个测试失败,我喜欢它,因为(例如),如果由于某种原因某个深度的第一个预订计算失败,一切都会变得混乱。但是,如果我只是想向某人展示一些我知道工作的类型的生成代码,那么如果我无法快速构建我的应用程序,那是非常烦人的,因为我现在正在处理的类型还没有完成。

因此,鉴于此背景,我如何才能获得一个检查这些生成规范的自动化系统?我可以考虑的可能性:

  • Junit集成解决方案似乎不太理想,除非我能够改进maven,junit和junit与我的跑步者和其他所有人的整合。
  • 我们之前使用过fitnesse,但总体上放弃了它,因为它引起的问题比它解决的更多。我们遇到的主要问题是融入maven和hudson。
  • 使用texttest的解决方案。我并不完全相信,因为这主要是想要一个可执行文件,字符串放在标准输出上的stdin和字符串上。添加整个“运行应用程序,与主机代码链接,然后运行生成的可执行文件”似乎有点复杂。
  • 编写我自己的解决方案。这当然会起作用并做我想做的事。但是,与往常一样,这将是最耗时的任务。

那么......你是否看到另一种可能的方法来避免自己写一些东西?

1 个答案:

答案 0 :(得分:0)

您可以使用-Dmaven.test.skip = true运行Maven。 Netbeans有一种自动设置的方法,除非你明确点击其中一个命令来测试项目,我不知道Eclipse。