C# 使用Excel工作表作为数据源将测试结果写回TestContext

C# 使用Excel工作表作为数据源将测试结果写回TestContext,c#,unit-testing,data-driven-tests,C#,Unit Testing,Data Driven Tests,我们有很多测试,测试数据存储在Excel中。我创建了testmethods,其中Excel工作表作为数据源连接到TestContext 出于方便的原因,我想用测试结果更新Excel表格,以便很容易看出数据(或系统)的错误之处 我尝试过的事情: 将其直接写入TestContext.DataRow: TestContext.DataRow.BeginEdit(); TestContext.DataRow["Result"] = "change"; TestContext.DataRow.EndEdi

我们有很多测试,测试数据存储在Excel中。我创建了testmethods,其中Excel工作表作为
数据源连接到
TestContext

出于方便的原因,我想用测试结果更新Excel表格,以便很容易看出数据(或系统)的错误之处

我尝试过的事情:

将其直接写入
TestContext.DataRow

TestContext.DataRow.BeginEdit();
TestContext.DataRow["Result"] = "change";
TestContext.DataRow.EndEdit();
TestContext.DataRow.AcceptChanges();
结果:通过,但我的Excel文件中没有更新行

通过
数据连接更新它

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:UPDATE语句中出现语法错误。

并通过更改
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文件中也没有更新行


以前有人这样做成功吗?或者有人暗示我可能错了吗?

MSTest不支持为数据驱动的测试写回数据行,而且它的设计目的不是这样的


我的建议是使用<代码> Trace.Wrror()>代码>等方法将结果打印到测试的每个迭代的结果中,这是我在测试失败时进行调试的目的。

我认为您应该将测试数据视为只读。不要更改文件。相反从测试中生成有用的输出,包括失败行中的有用信息。@PabloRomeo感谢您的考虑,这就是我现在所做的:我将所有包含行信息的列标题输出到控制台,并使用Description属性以Gherkin语言输入testcase信息,以便编写testcase已满,因此即使是非技术人员也可以重新测试。尽管将结果输出到Excel文件中的自定义列并使用条件格式显示哪些数据在测试中失败会非常方便,但我在这种方法中遇到了更多困难,如签出策略和文件锁定。为什么不使用VS从TestResults.trx查看失败或通过的状态?如果我没有弄错的话,数据驱动的测试会扩展到多个条目(数据源中每行一个条目)。此外,例如,在过去,我使用了一些公开的XSLT转换将TRX结果转换为人类可读的html文件。