对于某些测试,我需要使用在ClassInitialize方法中生成(通过反射)的配置(通过使用反射)来运行数据驱动的测试。我尝试了一切,但我无法正确设置数据源。
测试获取csv文件中的类列表(每个类一行),然后将测试到数据库的映射是否运行良好(即尝试从数据库中获取每个实体的一个项目,这将抛出表结构不匹配时的异常。)
测试方法是:
[DataSource(
"Microsoft.VisualStudio.TestTools.DataSource.CSV",
"|DataDirectory|\\EntityMappingsTests.Types.csv",
"EntityMappingsTests.Types#csv",
DataAccessMethod.Sequential)
]
[TestMethod()]
public void TestMappings () {
显然该文件是EntityMappingsTests.Types.csv。它应该在DataDirectory中。
现在,在Initialize方法(用ClassInitialize标记)中,我将它放在一起,然后尝试编写它。
我应该把它写在哪里? DataDirectory在哪里?
我试过了:
File.WriteAllText(context.TestDeploymentDir + "\\EntityMappingsTests.Types.csv", types.ToString());
File.WriteAllText("EntityMappingsTests.Types.csv", types.ToString());
两者都导致“单元测试适配器无法连接到数据源或读取数据”。更确切地说:
错误详细信息:Microsoft Jet数据库引擎找不到 object'EntityMappingsTests.Types.csv'。确保对象存在 并且你正确地拼写它的名字和路径名。
那么我应该把该文件放在哪里?
我还尝试将其写入当前目录并取出DataDirectory部分 - 结果相同。可悲的是,这里的调试支持有限。
答案 0 :(得分:5)
请使用technet.microsoft.com/en-us/sysinternals/bb896645中的ProcessMonitor工具。在MSTest.exe或关联qtagent32.exe上放置一个过滤器,找出它尝试加载的位置以及测试加载过程中的哪个时间点。那么请在这里提供这些细节的更新。
答案 1 :(得分:1)
将CSV文件添加到VS项目后,需要打开它的属性。将属性“复制到输出目录”设置为“始终复制”。 DataDirectory默认为已编译的可执行文件的位置,该位置从输出目录运行,因此它将在那里找到它。