MsTest,DataSourceAttribute - 如何使用运行时生成的文件?

时间:2011-09-22 04:57:34

标签: datasource mstest

对于某些测试,我需要使用在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部分 - 结果相同。可悲的是,这里的调试支持有限。

2 个答案:

答案 0 :(得分:5)

请使用technet.microsoft.com/en-us/sysinternals/bb896645中的ProcessMonitor工具。在MSTest.exe或关联qtagent32.exe上放置一个过滤器,找出它尝试加载的位置以及测试加载过程中的哪个时间点。那么请在这里提供这些细节的更新。

答案 1 :(得分:1)

将CSV文件添加到VS项目后,需要打开它的属性。将属性“复制到输出目录”设置为“始终复制”。 DataDirectory默认为已编译的可执行文件的位置,该位置从输出目录运行,因此它将在那里找到它。