问题:在进行单元测试时,我的DAL程序集中引用的SQLite程序集不会被复制到输出文件夹(Copy local设置为true
)。
我在VS2008上使用.Net 3.5应用程序,NHibernate&我的DAL中的SQLite。数据访问通过IRepository接口(存储库工厂)公开到其他层,因此无需在其他层中引用NHibernate
或System.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.testrunconfig文件)中,它似乎也会被复制。
感谢您的快速解答!
答案 0 :(得分:7)
您的DAL项目引用了System.Data.SQLite
程序集,但这并不意味着它将被复制到测试项目的输出文件夹中,特别是如果它是使用NHibernate的反射加载的。如果您查看带有反射器的已编译DAL程序集,它甚至可能在引用的程序集列表中没有它,因为代码不会直接使用它。您已经通过将其引用到单元测试项目找到了解决方案。
答案 1 :(得分:1)
您可以使用Post-build步骤手动将dll复制到输出文件夹。