【发布时间】:2013-06-13 12:23:35
【问题描述】:
我们有很多测试,测试数据存储在 Excel 中。我创建了测试方法,其中 Excel 工作表作为 DataSource 连接到 TestContext。
为方便起见,我想用测试结果更新 Excel 工作表,以便轻松查看数据(或系统)的错误位置。
我尝试过的事情:
直接写到TestContext.DataRow:
TestContext.DataRow.BeginEdit();
TestContext.DataRow["Result"] = "change";
TestContext.DataRow.EndEdit();
TestContext.DataRow.AcceptChanges();
结果:通过,但我的 Excel 文件中没有更新任何行。
通过DataConnection更新它:
string currentRow = TestContext.DataRow["RowId"].ToString();
System.Data.Common.DbCommand cmd = TestContext.DataConnection.CreateCommand();
cmd.CommandText = String.Format("UPDATE {0} SET {1} = pass WHERE {2} = {3}", sheetName, columnName, "RowId", currentRow);
cmd.CommandType = System.Data.CommandType.Text;
cmd.ExecuteReader();
结果:System.Data.OleDb.OleDbException: Syntax error in UPDATE statement.
并通过更改TestContext 下的DataRow 来更新它:
string currentRow = TestContext.DataRow["RowId"].ToString();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.UpdateCommand = new OleDbCommand(String.Format("UPDATE {0} SET {1} = pass WHERE {2} = {3}", sheetName, columnName, "RowId", currentRow));
adapter.UpdateCommand.Connection = (OleDbConnection)TestContext.DataConnection;
adapter.Update(new System.Data.DataRow[] { TestContext.DataRow });
结果:也通过了,但我的 Excel 文件中也没有更新任何行。
之前有人成功地做到过吗?或者有人暗示我可能错了吗?
【问题讨论】:
-
我认为您应该将您的测试数据视为只读数据。不要更改文件。相反,从测试中生成有用的输出,包括来自失败行的有用信息。
-
@PabloRomeo 感谢您的考虑,这就是我现在的做法:我将带有行信息的所有列标题输出到控制台,并使用 Description 属性以 Gherkin 语言输入测试用例信息所以测试用例是完整的,所以即使是非技术人员也可以重新测试。尽管将结果输出到 Excel 文件中的自定义列并使用条件格式显示测试中失败的数据会非常方便,但我在使用这种方法时遇到了更多困难,例如检查策略和文件锁定。
-
为什么不直接使用 VS 从 TestResults.trx 中查看失败或通过状态?如果我没记错的话,数据驱动的测试会扩展到多个条目(数据源中的每一行一个)。此外,例如,在过去,我使用了一些公开可用的 XSLT 转换将 TRX 结果转换为人类可读的 html 文件。
标签: c# unit-testing data-driven-tests