【问题标题】:Unity, Unit tests and ASP.NET (not MVC)Unity、单元测试和 ASP.NET(不是 MVC)
【发布时间】:2013-10-29 13:22:32
【问题描述】:

我在 ASP.NET 项目(不是 MVC)中使用 Unity。似乎单元测试需要了解 Unity,创建一个 IoC 容器并将 Mocks 插入其中,这与我使用的其他单元测试框架不同。

使用 Unity 解析类的示例似乎是:

public class Foo
{

    [Dependency]
    private ILogger Logger { set; get; }

}

或直接从容器中解析:

UnityTest.Interfaces.IMenuBL ser = Global.Container.Resolve<UnityTest.Interfaces.IMenuBL>(); 

是否有可能在非 MVC ASP.NET 中让 Unity 执行构造函数注入,以便我的单元测试不绑定到我的 IoC 容器?

干杯

戴夫

【问题讨论】:

  • 如果您使用 Web 表单,您可以进行属性注入。 David Hayden 有一个截屏视频,展示了如何做到这一点,但我再也找不到了。我写了一篇关于如何使用 ASP.NET Web 服务做到这一点的文章,它应该很容易让您适应它并将其与 Web 窗体一起使用:ruijarimba.wordpress.com/2011/12/27/…
  • 感谢 Rui,我不认为这是 Unity 的技术。是否有任何 IoC 容器能够在 WebForms 上提供构造函数注入?
  • 不,这不是 Unity 特定的事情,我认为您在使用其他 IoC 容器时也会遇到同样的问题。我知道属性注入并不理想,但这就是您必须使用 ASP.NET Web 窗体... :(
  • @RuiJarimba,如果您想在下面添加“您无法使用任何当前的 IoC 框架和 WedForms 执行构造函数注入”作为答案,那么我会将其标记为正确。

标签: asp.net .net unit-testing inversion-of-control unity-container


【解决方案1】:

ASP.NET Web 窗体的设计并未考虑可测试性。您不能使用 Web 窗体进行构造函数注入,至少在不使用一些狡猾的变通方法(例如创建页面处理程序)的情况下不能 - 请参阅 How to use Dependency Injection with ASP.NET Web Forms。

最好的选择是使用属性注入。

编辑:您可以考虑使用MVP pattern 以提高 Web 表单页面的可测试性:

MSDN - Better Web Forms with the MVP Pattern

【讨论】:

  • MVP 模式的好补充!我只是在想代码页必须像头发一样薄。
猜你喜欢
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
相关资源
最近更新 更多