自动化测试OpenXML SDK

10

我正在使用内容控件和OpenXML SDK实现MS Word文档生成。我想为该代码编写一些自动化测试(单元测试或一些简单的UI自动化测试)。

有人有测试MS Word文档生成的经验吗?可能有哪些选项?

提前感谢!


为什么OpenXML单元测试必须与标准不同?您是在尝试验证文档是否可以在Word中打开,还是它看起来是否正确? - Ingó Vals
这并不是不同,只是技术上比较困难。典型的测试是安排-执行-断言。因此问题是如何轻松地完成最后一步 - 断言。可能使用一些单词自动化或UI自动化框架,但我没有看到一个简单的方法来做到这一点。因此,我最终生成报告并在Word中打开,以便手动检查报告是否正确。这不是“纯”单元测试,但比运行完整应用程序以生成所需报告要好。此外,我对直接使用Open XML处理代码进行测试感兴趣,所有其他部分都已分离并使用通常的单元测试进行了测试。 - Andrii
4个回答

6
不,我没有对MS Word文档生成进行单元测试,但正如Ingó Vals所说,它不应该与任何其他形式的单元测试有任何区别。
1)[可选-确保您正确使用SDK以满足您的需求]。确定您的应用程序应如何驱动SDK。编写一些测试脚本,模拟预期功能并确保它们生成的Word文档符合您的期望。
2)创建一个接口(或多个接口),其中包含与您需要用于文档生成的功能相对应的方法。注意:接口不需要提供OpenXML SDK的全部功能-只需要您的应用程序所需的功能即可。
3)创建一个具体实现你的接口,将调用转发给OpenXML SDK。
4)在应用程序中利用您创建的接口执行文档生成。
5)使用NUnit和NMock(或类似工具)编写单元测试,驱动您应用程序的生成层。这些测试应使用模拟接口而不是具体实现的实例。现在,您可以在测试中断言您的生成层表现如您所期望的那样。

谢谢你的回答,但问题是我想测试直接操作Open XML SDK的代码。其他的我可以分离或模拟,这很清楚。使用模拟代替实际调用Open XML SDK并不是我喜欢的方式,因为我想测试的是我的代码与SDK的配合是否良好。有人可能会说这不是一个纯粹的单元测试,但这正是我当前测试中真正缺少的。 - Andrii
1
我所描述的是对代码进行单元测试。我会称你想要的为集成测试。在这种情况下,我猜你可以让SDK输出Word XML,并编写一个比较生成的DOM和你期望的DOM的方法。 - Seb Rose
没错,单元测试、集成测试、UI自动化测试或者其他类型的自动化测试都可以。总之,任何一种能够进行验证(测试中的Assert部分)的自动化测试都可以。会检查DOM比较。非常感谢! - Andrii
我同意Seb Rose的观点。创建你期望生成的文档或文档部分(带有所有必要的功能以确保你测试每个方面),并将其与你在测试中所创建的进行比较。 - Ingó Vals

2

我实际上在使用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();
}

0

0

测试 Microsoft Word 文档生成的高级方法如下:

  1. 定义测试用例,其中每个测试用例包括:

    • 生成器输入,即用于生成 Word 文档的数据;以及
    • 期望的输出 Open XML 格式,即表示正确生成的 Word 文档的 Open XML 标记。
  2. 编写测试方法,使用您喜欢的单元测试框架(例如 xUnit)。使用典型的“安排、执行、断言”模式,这些测试方法:

    • 根据需要设置生成器、生成器输入和期望的生成器输出;
    • 运行生成器,提供生成器输入并捕获实际的生成器输出;以及
    • 将实际的生成器输出与期望的生成器输出进行比较。

使用 Open XML SDK 很容易检索实际的生成器输出。在比较实际和期望的输出时,您可以应用不同级别的标记过滤或简化。例如,您可以专注于基本标记,如问题中提到的内容控件(w:sdt 元素)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接