.net 国际奥委会能解决我们的问题吗?
只是尝试在一个棕地类型的系统中实现单元测试。请注意,我对单元测试领域还比较陌生。当然,这将是一个渐进的迁移过程,因为有太多的痛苦领域 我正在试图解决的当前问题是,我们在VB6工作日以及将应用程序转换为.Net的过程中遵循了许多错误做法。我们有很多共享/静态函数,它们调用其他共享函数,那些调用其他函数等等。有时依赖项作为参数传入,有时它们只是在调用函数中更新。我已经指示我们的开发人员停止创建共享函数,而是创建实例成员,只在接口之外使用这些实例成员,但这并不能缓解当前的情况。因此,对于代码路径和方法签名中的每个函数,必须在顶层递归地传递每个依赖项 我希望这是国际奥委会能够解决的问题。目前我们正在使用NUnit/Moq,我开始研究StructureMap。到目前为止,我了解到您几乎告诉StructureMap for x interface我希望默认为具体的类y:.net 国际奥委会能解决我们的问题吗?,.net,unit-testing,ioc-container,.net,Unit Testing,Ioc Container,只是尝试在一个棕地类型的系统中实现单元测试。请注意,我对单元测试领域还比较陌生。当然,这将是一个渐进的迁移过程,因为有太多的痛苦领域 我正在试图解决的当前问题是,我们在VB6工作日以及将应用程序转换为.Net的过程中遵循了许多错误做法。我们有很多共享/静态函数,它们调用其他共享函数,那些调用其他函数等等。有时依赖项作为参数传入,有时它们只是在调用函数中更新。我已经指示我们的开发人员停止创建共享函数,而是创建实例成员,只在接口之外使用这些实例成员,但这并不能缓解当前的情况。因此,对于代码路径和方法
ObjectFactory.Initialize(x=>{x.ForRequestType<IInterface>().TheDefaultIsConcreteType<MyClass>()});
ObjectFactory.Initialize(x=>{x.ForRequestType().TheDefaultIsConcreteType()});
然后到运行时:
var mytype = ObjectFactory.GetInstance<IInterface>();
var mytype=ObjectFactory.GetInstance();
IOC容器将为您初始化正确的类型。目前还不确定如何将一个假输入替换为具体类型,但希望这很简单。国际奥委会会解决我上面提到的问题吗?是否有一个特定的IOC框架比StructureMap做得更好,或者他们都能处理这种情况。任何帮助都将不胜感激。不过,这并不是什么灵丹妙药 注意:应该在应用程序根目录下设置IOC容器。不是临时的。否则,您将实现一个反模式的服务定位器
遵循生产代码的构造注入,让IOC容器解决依赖关系。对于单元测试,您只需硬编码依赖项。这将允许您使用模拟对象(双重测试)。换句话说,IOC与单元测试无关 IoC在摆脱静态方法和避免依赖项委托方面非常出色,因为每个类都可以很容易地显式声明所有依赖项 关于单元测试,有两个阵营:
- 在IOC容器中插入mock作为依赖项的实例,您不希望在特定情况下对其进行测试,并让容器像往常一样解析。如果您想将多个类作为一个集成组件进行测试,那么这种方法尤其有效
- 模拟构建类的单个对象以手动测试和插入这些对象所需的所有实例。如果您希望坚持单独测试每个类(您的单元是一个类),那么这种方法尤其有效