SQLite程序集未复制到输出文件夹以进行单元测试

时间:2010-04-27 07:00:17

标签: .net unit-testing nhibernate system.data.sqlite

问题:在进行单元测试时,我的DAL程序集中引用的SQLite程序集不会被复制到输出文件夹(Copy local设置为true)。

我在VS2008上使用.Net 3.5应用程序,NHibernate&我的DAL中的SQLite。数据访问通过IRepository接口(存储库工厂)公开到其他层,因此无需在其他层中引用NHibernateSystem.Data.SQLite程序集。

对于单元测试,有一个公共工厂方法(也在我的DAL中),它创建一个内存中的SQLite会话并创建一个新的IRepository实现。这样做也是为了避免为需要它的所有程序集提供共享的SQLite内存配置,并避免引用那些DAL内部程序集。

问题是当我运行单独项目的单元测试时 - 如果我不添加System.Data.SQLite作为单元测试项目的引用,它不会被复制到TestResults ... \ Out文件夹(虽然这个项目引用了我的DAL项目,它引用了System.Data.SQLite,其Copy本地属性设置为true),因此在配置NHibernate时测试失败。如果我添加对我的测试项目的引用,那么它会被复制并且单元测试工作。

我做错了什么?

[更新]

我似乎在这里找到了答案:TFS UnitTesting not deploying local copy assembly to test dir when on build server。如果我在DAL中的某个静态方法中添加对该类型的引用,那么当我在测试中引用DAL程序集时,它将自动复制。这似乎是一个黑客攻击,但恕我直言是一个更清晰的解决方案,而不是单独的脚本,因为它创建了一个“真正的”依赖。

如果我将SQLite程序集作为附加部署项添加到我的测试运行配置(LocalTestRun.testrunco​​nfig文件)中,它似乎也会被复制。

感谢您的快速解答!

2 个答案:

答案 0 :(得分:7)

您的DAL项目引用了System.Data.SQLite程序集,但这并不意味着它将被复制到测试项目的输出文件夹中,特别是如果它是使用NHibernate的反射加载的。如果您查看带有反射器的已编译DAL程序集,它甚至可能在引用的程序集列表中没有它,因为代码不会直接使用它。您已经通过将其引用到单元测试项目找到了解决方案。

答案 1 :(得分:1)

您可以使用Post-build步骤手动将dll复制到输出文件夹。