我正在使用内容控件和 OpenXML SDK 实现 ms word 文档生成。我想对该代码进行一些自动化测试(单元测试或一些简单的 UI 自动化测试)。
有没有人有测试 MS Word 文档生成的经验?有哪些可能的选择?
提前致谢!
我正在使用内容控件和 OpenXML SDK 实现 ms word 文档生成。我想对该代码进行一些自动化测试(单元测试或一些简单的 UI 自动化测试)。
有没有人有测试 MS Word 文档生成的经验?有哪些可能的选择?
提前致谢!
不,我没有对 MS Word 文档生成进行单元测试,但正如 Ingó Vals 所说,它与任何其他形式的单元测试应该没有什么不同。
1) [可选 - 以确保您了解 SDK 的正确用法以满足您的需求]。确定您的应用程序应如何驱动 SDK。编写一些模拟预期功能的测试脚本,并确保它们生成的 Word 文档符合您的期望。
2) 创建一个接口(或多个接口),其中包含与生成文档所需的功能相对应的方法。注意:该接口不需要提供 OpenXML SDK 的全部功能 - 只需提供您的应用程序所需的功能。
3) 创建接口的具体实现,将调用转发到 OpenXML SDK
4) 利用您在应用程序中创建的界面来执行文档生成。
5) 使用 NUnit 和 NMock(或类似的)编写驱动应用程序生成层的单元测试。这些测试应该使用模拟接口,而不是具体实现的实例。您现在可以在测试中断言您的生成层的行为符合您的预期。
我实际上正在使用用于电子表格的 OpenXML SDK 做类似的事情,我实际上只是编写了 OpenXML api 代码,该代码从流中打开文件以进行测试。单元测试并不能真正告诉您足够多的信息,因为您需要知道它是否是有效文件。
// There should be a sheet for every team
[TestMethod]
[HostType("Moles")]
public void CaseExportTeamSheetsTest()
{
IRepository<ServiceTbl, ServiceTbl> ServiceRepository;
CaseController target;
BuildCaseControllerMoledCases(out ServiceRepository, out target);
FileStreamResult actual = target.Export(); using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(actual.FileStream, false))
{
var services = ServiceRepository.All;
foreach (var item in services)
{
// get a worksheet foreach service
var sheets = spreadsheetDocument.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == item.ServiceName);
Assert.IsTrue(sheets.Count() > 0);
}
}
actual.FileStream.Close();
actual.FileStream.Dispose();
}
关于 OpenXml Sdk 2.0 和有效代码的警告......
我生成了 OpenXml Powerpoints 文档,该文档使用 XML SDK 2.0 工具进行验证,并在我的 PC 上的 Office 2007 中工作,但是当使用 Office Powerpoint 2007 在另一台机器上打开文档时,它抱怨并说格式无效
XML SDK 2.0 http://www.microsoft.com/downloads/details.aspx?FamilyId=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=en
测试 Microsoft Word 文档生成的高级方法如下:
定义测试用例,每个测试用例包括:
使用您最喜欢的单元测试框架(例如,xUnit)编写测试方法。使用典型的“Arrange, Act, Assert”模式,这些测试方法:
使用 Open XML SDK 很容易检索实际的生成器输出。在比较实际输出和预期输出时,您可以应用不同级别的标记过滤或简化。例如,您可以专注于基本标记,例如w:sdt
问题中提到的内容控件(元素)。