2010-12-21 26 views
3

我正在用WIX构建合并模块。调用WIX工具从* .wxs文件生成合并模块的批处理文件由我的日常构建运行。如何对WIX合并模块进行单元测试?

我想弄清楚如何自动化这些合并模块的测试。我想测试的是,合并模块是否安装所需的文件,文件的版本是否正确等。

我的一个想法是编写一个脚本(可能是VB脚本)来安装合并模块在一个临时的位置,并检查它是否正确安装了一切。但是,我不确定这是否是一种正确的方法。

是否有任何标准的方式来编写合并模块的单元测试?任何关于如何去做的想法都是值得欢迎的。

回答

1

我经常想到这个,但没有拿出任何我喜欢的东西。首先,我会称这个集成测试不是严格的单元测试。其次“正确文件”和“正确版本”的问题很难界定。

我常常想说WiX/MSI只是定义安装程序要做什么的数据。它在本质上是声明性的,因此根据定义是正确的。想要创建另一组交叉检查安装程序实现的数据是很有吸引力的,但是第一个数据集尚不能代表什么呢?有时很难维护哪些文件进入应用程序,而仅用于维护第二个文件列表。

我继续思考这个问题,并想知道是否有一个合理的方法,但在这一点上我只是做我的正常MSI验证。

+0

你说得对,WIX文件本身就是设置应该是什么样的声明,同一事物的任何其他表示都是多余的。你能解释你如何做MSI验证? – 2010-12-29 07:36:32

+0

WiX通常会在构建结束时自动进行验证,除非您禁止该验证。阅读http://msdn.microsoft.com/en-us/library/aa372477(VS.85).aspx – 2010-12-29 15:06:14

+0

另请阅读http://blog.deploymentengineering.com/2009/02/msi-tip-authoring-ice-使用-C-dtf.html – 2010-12-29 15:06:44

1

您可以尝试使用脚本或其他可以完成这项工作的小控制台程序,就像您所建议的一样。

通过构建过程,您还可以构建仅使用合并模块的基本设置。你的脚本可以安装它,运行其他脚本或控制台应用程序,它将检查所有文件是否在位,是否有正确的版本,是否安装了所有注册表项等。在收集完所有输出后,您的主脚本将只是卸载一切。您也可以在卸载后运行检查程序,以确保一切都没有了,并且卸载能够正常工作。例如,如果您将自定义操作设置为安装和卸载,我会推荐这种方法。

理想情况下,整个安装/卸载过程应该在单独的机器或虚拟机上完成,以避免搞乱构建服务器。

对于所有这些脚本,您都有一些工作要做,但是一旦拥有了它,您就可以对其他任何未来的合并模块项目或简单的安装项目进行小小更改。

希望这会有所帮助,

阿德里安。

3

当你测试一个安装程序,主要目标是验证

  1. 当安装MSI文件,msiexec报告成功(即返回码0)。
  2. 运行安装程序后,您的应用程序可以启动并按预期工作。

第一点应该很容易做到,但如果您想保持测试自动化,您只能测试非交互式安装。下面是一个例子,说明如何从批处理文件或命令行执行该操作:

msiexec /i myinstaller.msi /passive || echo ERROR: non-zero return code! 

第二点有点复杂。我认为实现这一目标的最佳途径是建立一些集成测试到应用程序,并调用安装后,这些测试:

"c:\program files\mystuff\app.exe" /selftest || echo ERROR: non-zero return code! 

在你的情况,你正在测试一个合并模块而不是整个安装程序。可以使用相同的方法。你只需要做额外的工作来构建一个“自测”应用程序和它的安装程序,它会消耗你的合并模块。

相关问题