当前位置:  开发笔记 > 编程语言 > 正文

将StructureMap与单元测试结合使用

如何解决《将StructureMap与单元测试结合使用》经验,为你挑选了2个好方法。

我在DI IOC的Web项目中使用StructureMap.它工作得很完美,但我不知道如何用StructureMap编写单元测试.

我应该在AssemblyInitialize中开始配置StructureMap,就像在global.asax中一样,除了datacontext不使用实时LinqToSqlDataContext但是有些内存数据如下:

 [AssemblyInitialize]
 public static void Start()
 {
        ObjectFactory.Configure(x =>
                {
                    x.For().HttpContextScoped().Use()
                        .Ctor("connectionString")
                        .Is(ConfigurationManager.ConnectionStrings["DEVConnection"].ConnectionString);
                    x.For().Use();
                    x.For().Use().OnCreation(c => c.User = Current.CurrentUser);
                    x.For().Use().OnCreation(c=> c.User = Current.CurrentUser);
                    x.For().Use();
                    x.For().Use();
                    x.For().Use();
                    x.For().Use();
                    x.For().Use();
                    x.For().Use();
                }
            );
 }

然后使用ObjectFactory.GetInstance()测试或我该怎么做?



1> Mark Seemann..:

您根本不需要在单元测试中使用DI容器.

容器是用于将组件连接在一起的东西,但单元测试是对每个组件进行单独测试.



2> KevM..:

我同意马克的观点.可测试性是您可能首先使用容器的主要原因之一.

有时,为容器设置创建集成测试可能是个好主意.例如,如果容器配置中有任何行为,则需要为该行为创建测试.在容器配置中,您可以通过配置管理器设置IDataContext的连接字符串.

以下代码与我测试此类设置的代码类似.注意我避免使用ObjectFactory(静态单例对象有自己的问题)并将我的容器设置包装在bootstrapper helper类中:

[Test]
public void connection_string_should_come_from_application_configuration()
{
  var container = new ContainerBootstraper().Container;

  var connectionString = container.GetInstance().ConnectionString

  connectionString.ShouldEqual("test project application configuration connection string");
}

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有