单元/集成测试中的反射问题

时间:2009-07-13 18:19:34

标签: c# unit-testing reflection

我动态创建一个带反射的类的实例,这种方法很好,除非通过单元测试尝试这样做 - 我使用的是MS测试框架。
我得到了一个熟悉的错误:“无法加载文件或程序集'Assy'或其中一个依赖项。系统找不到指定的文件”
我已将dll复制到Unit测试项目的bin \ debug bin中 - 这不是放置它的正确位置吗?

string assyName = "Go.Data.SqlServer";
string typeName = "GoMolaMola.Data.SqlServer.DataProviderFactory";

Assembly assy = Assembly.Load( assyName );
object o = assy.CreateInstance( typeName );

有什么想法吗?我是单位测试的新手,我们将不胜感激。

由于

3 个答案:

答案 0 :(得分:4)

bin/Debug文件夹不是单元测试运行的位置。 Visual Studio会将单元测试编译的输出复制到TestResults文件夹(通常保留最后五次测试运行,每个测试运行时都会在文件夹名称中嵌入时间戳)并在那里运行单元测试。

如果您想在该文件夹中使用.DLL,请从测试项目创建对.DLL的引用,或使用DeploymentItem属性确保将该项目复制到测试目录。

答案 1 :(得分:1)

我也遇到了这个问题,上述答案都没有对我有用:( 1.添加对项目的引用对我不起作用 2.添加DeploymentItem属性也不起作用 3.在这种情况下,添加Post-Build命令也是不可能的,因为单元测试引擎每次创建一个新的out目录时都带有时间戳....并且它在这个新目录中搜索该程序集。

但我设法通过在本地测试设置中启用部署和添加指定文件来解决此问题 - >部署

答案 2 :(得分:0)

对于这样的情况,当单元测试需要动态加载DLL时,我有一个后期构建事件,它将DLL复制到该目录。我很想知道是否有另一种方法可以做到这一点。这是对我有用的唯一方式:(

要编辑构建后,右键单击项目,转到构建事件,然后将副本放置在Post-Build事件中命令行:

copy $(TargetPath) "$(SolutionDir)yourDir\$(TargetFileName)"