使用断言来比较两个excel文件

时间:2016-07-15 15:00:42

标签: c# excel visual-studio assertions

我使用Visual Studio创建一个自动化测试,创建两个Excel工作表。作为最后的检查,我需要比较这两个excel表的内容并确保它们是相同的。有没有办法用断言来做到这一点?

Assert.AreEqual(file1, file2);

之类的东西

任何帮助或指导都将不胜感激!

3 个答案:

答案 0 :(得分:2)

您可以将预期/实际的Excel工作表转换为文本格式,例如CSV吗?

如果是这样,您可以改用Approval Tests。这允许您将文本文件作为“预期”测试结果。当测试失败时,它可以显示测试的实际结果,与预期结果区别开来。

Diff view

取自this review审批测试的截图。

答案 1 :(得分:1)

感谢Mangist获取有关此问题的指导。我写了以下内容来比较两个excel文件:

public bool compareFiles(string filePath1, string filePath2)
    {
        bool result = false;
        Excel.Application excel = new Excel.Application();

        //Open files to compare
        Excel.Workbook workbook1 = excel.Workbooks.Open(filePath1);
        Excel.Workbook workbook2 = excel.Workbooks.Open(filePath2);

        //Open sheets to grab values from
        Excel.Worksheet worksheet1 = (Excel.Worksheet)workbook1.Sheets[1];
        Excel.Worksheet worksheet2 = (Excel.Worksheet)workbook2.Sheets[1];

        //Get the used range of cells
        Excel.Range range = worksheet2.UsedRange;
        int maxColumns = range.Columns.Count;
        int maxRows = range.Rows.Count;

        //Check that each cell matches
        for (int i = 1; i <= maxColumns; i++)
        {
            for (int j = 1; j <= maxRows; j++)
            {
                if (worksheet1.Cells[j, i].Value == worksheet2.Cells[j, i].Value)
                {
                    result = true;
                }
                else
                    result = false;
            }
        }


        //Close the workbooks
        GC.Collect();
        GC.WaitForPendingFinalizers();
        Marshal.ReleaseComObject(range);
        Marshal.ReleaseComObject(worksheet1);
        Marshal.ReleaseComObject(worksheet2);
        workbook1.Close();
        workbook2.Close();
        excel.Quit();
        Marshal.ReleaseComObject(excel);

        //Tell us if it is true or false
        return result;
    }

使用断言检查结果:

Assert.IsTrue(compareFiles(testFile, compareFile), "Output files do not match.");

答案 2 :(得分:0)

一个选项将使用名为EPPlus的开源库。您可以在自动测试应用程序中下载并引用它。 EPPlus为您提供了多种方式来读取Excel文件并进行比较。一个这样的选择是C#Datatable。这是一个示例代码..

public static DataTable GetDataTableFromExcel(string path, bool hasHeader = true)
{ 
using (var pck = new OfficeOpenXml.ExcelPackage())
{
    using (var stream = File.OpenRead(path))
    {
        pck.Load(stream);
    }
    var ws = pck.Workbook.Worksheets.First();  
    DataTable tbl = new DataTable();
    foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
    {
        tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
    }
    var startRow = hasHeader ? 2 : 1;
    for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
    {
        var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
        DataRow row = tbl.Rows.Add();
        foreach (var cell in wsRow)
        {
            row[cell.Start.Column - 1] = cell.Text;
        }
    }
    return tbl;
}
}

对于这两个Excel文件,可以采用相同的过程,它将为您提供所需的结果。