繁体   English   中英

避免在用于单元测试时在 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,,

我有一列有整数,我想把它扩展到十六进制。 所以我从“值”列中获取值,而不是将其转换为 int

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

我试图访问代表 integer 的字符串

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

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

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

现在我的问题:

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

我已经进一步调查过,对于谁会有同样的问题,我在这里写下来。
对我的问题的简短回答是否定的,我不能在我的限制范围内。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM