用于单元测试时绕过 CSV 文件中的非自愿键入列

Get around involuntary typing of columns in CSV file when using for unit test

我正在使用 CSV 文件将数据注入我的测试。

[TestMethod]
[DataSource( CsvData, CsvDir + "TC177023.csv", "TC177023#csv", SEQ )]

文件看起来像这样:(删除了其他字符串)

something,something,Value,something,something,something
,,0xDEADBEEF,,
,,-12,,
,,0,,
,,0,,
,,0,,

我有一列有整数,我想将其扩展为十六进制。所以我从列 "Value" 中获取了值,而不是将其转换为 int

int value = (int)TestContext["Value"];  

我试图访问表示整数的字符串

string text = TestContext.DataRow["Value"].ToString();  

但我得到的只是一个空字符串。我不会用我试图找出问题所在的一切来打扰你。通过在调试时检查 TestContext 对象,我至少可以看出列的类型确实是 Int32。

最后我尝试用字符串替换列中的整数值,你瞧,我得到了我的十六进制值。我的结论是,在加载值时,测试框架是 "helping" me 并通过查看值来设置列的类型。

现在回答我的问题:

我可以在某处设置一些东西来抑制这种行为,以便 MS 单元测试框架无法帮助我吗? 我无法更改框架,无法将该列中的 int 值更改为可识别为字符串的内容。我不是该解决方案的最终用户,因此任何解决方法都可能会使事情变得更糟。我只想获取 "cell" 的 "raw value" 以进行进一步处理。

我查了一下,谁有同样的问题,我记录下来。
在这里对我的问题的简短回答是否定的,我不能在我的限制范围内。

长答案是:测试框架正在使用 oledb 连接读取 excel 和 csv 文件。有一种方法可以让 oledb 接受 "mixed values",将字符串 "IMEX = 1" 作为连接字符串中的扩展属性发送。
资源: https://yoursandmyideas.com/2011/02/05/how-to-read-or-write-excel-file-using-ace-oledb-data-provider/
不幸的是,连接字符串是在框架代码中设置的,至少在开源版本中,可以在 githug 上访问,我还没有找到在字符串中走私的方法。