2

我们有一个在 Autofac 中运行的 MVC 网络。所有配置都存储在 web.config 的 autofac 配置部分中,运行时 Global asax 设置容器并通过向它们提供配置设置来整理所有模块 - 我目前感兴趣的是NHibernate 模块 - 所以这会将连接字符串设置到其构造函数中。

我想构建一些测试来测试 NHibernate 的数据访问 - 我们有存储库和服务层,但这不一定相关。

我是否应该在包含所有测试的解决方案中添加一个额外的项目,如果我这样做,我需要在这个测试项目的 autofac 配置中复制数据库连接字符串,并在这个项目中构建一个测试容器来测试我的数据使用权?或者我是否应该尝试获取 Web 应用程序的容器来进行测试 - 我假设不是因为 Global.asax 的 Application_start 不会运行,除非被 http GET 命中。我真的不想复制 Web 应用程序的所有配置和容器创建,但目前我想我必须......?

4

1 回答 1

2

很抱歉看到对此的反应缓慢。为实际的 DAL 编写集成测试并不是很常见 - 大多数时候针对存根 DAL 的单元测试就足够了 - 所以在这种情况下可能没有那么多经验。

如果您将所有配置放入 Autofac 模块,您的 Global.asax 内容可以像调用一样简单builder.RegisterModule(new ConfigurationSettingsReader())- 然后可以使用带有文件名的重载从集成测试中加载相同的配置文件ConfigurationSettingsReader()

与其为正在测试的 NHibernate 提供单独的模块,不如考虑使用InstancePerLifetimeScope()而不是HttpRequestScoped()/InstancePerHttpRequest(). 这具有相同的效果(除非您已经修改了生命周期层次结构:)),并且适用于 Web 和非 Web 场景。

希望这可以帮助!缺口

于 2010-11-12T06:09:13.523 回答