Extends Verify to allow verification of Word and Excel documents via OpenXML.
Supports Excel (xlsx) and Word (docx) documents.
- Converts workbooks to CSV format for each worksheet
- Extracts formulas and displays them alongside cell values
- Captures document metadata (title, subject, creator, keywords, category, etc.)
- Supports date scrubbing and GUID scrubbing for deterministic tests
- Generates deterministic XLSX output using DeterministicIoPackaging
- Extracts document text content from paragraphs and tables
- Captures document properties (title, subject, creator, keywords, etc.)
- Captures custom document properties
- Extracts font information
- Generates deterministic DOCX output using DeterministicIoPackaging
See Milestones for release notes.
Entity Framework Extensions is a major sponsor and is proud to contribute to the development this project.
[ModuleInitializer]
public static void Initialize() =>
VerifyOpenXml.Initialize();[Test]
public Task VerifyExcel() =>
VerifyFile("sample.xlsx");[Test]
public Task VerifyExcelStream()
{
var stream = new MemoryStream(File.ReadAllBytes("sample.xlsx"));
return Verify(stream, "xlsx");
}[Test]
public async Task VerifySpreadsheetDocument()
{
await using var stream = File.OpenRead("sample.xlsx");
using var reader = SpreadsheetDocument.Open(stream, false);
await Verify(reader);
}0,First Name,Last Name,Gender,Country,Date,Age,Id,Formula
1,Dulce,Abril,Female,United States,2017-10-15,32,1562,G2+H21594 (G2+H2)
2,Mara,Hashimoto,Female,Great Britain,2016-08-16,25,1582,1607
3,Philip,Gent,Male,France,2015-05-21,36,2587,2623
4,Kathleen,Hanner,Female,United States,2017-10-15,25,3549,3574
5,Nereida,Magwood,Female,United States,2016-08-16,58,2468,2526
6,Gaston,Brumm,Male,United States,2015-05-21,24,2554,2578[Test]
public Task VerifyWord() =>
VerifyFile("sample.docx");[Test]
public Task VerifyWordStream()
{
var stream = new MemoryStream(File.ReadAllBytes("sample.docx"));
return Verify(stream, "docx");
}When verifying binary package output (xlsx, docx, nupkg, etc.) across multiple target frameworks (e.g. net48 and net10.0), the binary output may differ due to Deflate compression implementation differences. The XML content within entries is identical — only the compressed bytes differ. Use UniqueForRuntime to generate framework-specific verified files:
await Verify(stream, extension: "xlsx")
.UniqueForRuntime();See Verify Naming docs for more details.
[Test]
public async Task VerifyWordprocessingDocument()
{
await using var stream = File.OpenRead("sample.docx");
using var reader = WordprocessingDocument.Open(stream, false);
await Verify(reader);
}