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

Gro*_*roo 8 .net nhibernate unit-testing system.data.sqlite

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

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

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

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

我究竟做错了什么?

[更新]

看来我在这里找到了答案:TFS UnitTesting在构建服务器上没有部署本地副本程序集来测试目录.如果我在DAL中的某个静态方法中添加对该类型的引用,那么当我在测试中引用DAL程序集时,它将自动复制.这似乎是一个黑客,但恕我直言是一个更清洁的解决方案,而不是单独的脚本,因为它创建一个"真正的"依赖.

看来,如果我添加了SQLite的组件作为一个额外的部署项目到我的测试运行配置(LocalTestRun.testrunco​​nfig文件)也被复制.

谢谢你的快速解答!

Dar*_*rov 7

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