如何读取 Excel 列中的每一行以进行数据驱动单元测试

How to read every row in a column in Excel for a data driven unit test

我在我的解决方案中设置了数据驱动的单元测试。已连线,一切正常,这似乎是网上大多数文章和问题的重点。

我找不到的是如何读取任何给定列中第一行之后的后续行。

例如,如果我的 excel 文档设置如下:

  A    |   B
------ | ------
  A1   |   B1
  A2   |   B2
  A3   |
  A4   |  

然后回到我的单元测试中,我做了类似的事情:

var getValue = TestContext.DataRow["A"];
var getOtherValue = TestContext.DataRow["B"];

输出是 getValue = "A1"getOtherValue = B1。如果我尝试做这样的事情:

var getValue = TestContext.DataRow[0];
var getOtherValue = TestContext.DataRow[1];

输出仍然完全一样,这是有道理的。

我比较困惑的是如何获取A2A3B2等中的值。这样我就可以通过将它们插入 excel 来测试所有不同的场景。

再举个例子,如果我有这个table:

 Cost  |  QtyOrdered 
------ | ------------ 
  10   |   10       
  5    |   null
 null  |   2
 null  |   null       

在上述情况下,我想 运行 遍历所有不同的行,并确保插入的值符合我的预期。第一行我希望 100,并且在我的单元测试中我希望在每一个额外的行中出现错误消息。

如果我不能为每一列的多行插入一堆数据,我真的看不出 excel 中数据驱动单元测试的意义。

您可以使用循环或适合您需要的任何机制,从您的 Excel sheet 和 运行 测试中导入数据,对生成的数据集进行测试。我个人更喜欢 ClosedXml 因为它的可用性和速度。或者,您可以使用本机 Microsoft OLEDB 库来完成它。 祝你好运!

像这样进行数据驱动的单元测试将为电子表格中的每一行调用一次您的方法。如果一切都正确连接,那么就不需要任何其他东西了。

我会留下这个问题,因为我觉得它可能对将来的其他人有用,因为它的工作原理并不是很明显。