问题:在我的 DAL 程序集中引用的 SQLite 程序集在进行单元测试时不会被复制到输出文件夹(复制本地设置为true
)。
我正在 VS2008 中开发一个 .Net 3.5 应用程序,在我的 DAL 中使用 NHibernate 和 SQLite。数据访问通过 IRepository 接口(存储库工厂)暴露给其他层,因此不需要引用NHibernate
或System.Data.SQLite
其他层中的程序集。
对于单元测试,有一个公共工厂方法(也在我的 DAL 中),它创建一个内存 SQLite 会话并创建一个新的 IRepository 实现。这样做也是为了避免为所有需要它的程序集提供共享的 SQLite 内存配置,并避免引用那些 DAL 内部程序集。
问题是当我运行驻留在单独项目中的单元测试时 - 如果我不添加System.Data.SQLite
作为对单元测试项目的引用,它不会被复制到 TestResults...\Out 文件夹(尽管这个项目引用了我的DAL 项目,它引用System.Data.SQLite
,其 Copy local 属性设置为true
),因此在配置 NHibernate 时测试失败。如果我将引用添加到我的测试项目,那么它确实会被复制并且单元测试可以工作。
我究竟做错了什么?
[更新]
似乎我在这里找到了答案:TFS UnitTesting not deploying local copy assembly to test dir when on build server。如果我在 DAL 的某个静态方法中添加对该类型的引用,当我在测试中引用 DAL 程序集时,它将自动复制。这看起来确实像一个黑客,但恕我直言,它比拥有单独的脚本更干净,因为它创建了一个“真正的”依赖项。
如果我将 SQLite 程序集作为附加部署项添加到我的测试运行配置(LocalTestRun.testrunconfig 文件)中,它似乎也会被复制。
感谢您的快速回答!