我的 Visual Studio 2008 解决方案中有这种设置:一个使用库(Lib1,需要 app.config 文件中的一些配置条目)的 WCF 服务项目 (WCFService)。我有一个单元测试项目(MSTest),其中包含与 Lib1 相关的测试。为了运行这些测试,我需要测试项目中的配置文件。有没有办法从 WCFService 自动加载它,这样我就不需要在两个地方更改配置条目?
让您的库在整个代码中直接从 app.config 文件读取属性将使您的代码变得脆弱且难以测试。最好有一个类负责读取配置并以强类型的方式存储配置值。让此类实现一个从配置中定义属性的接口,或者使属性成为虚拟的。然后你可以模拟这个类(使用像RhinoMocks这样的框架或手工制作一个也实现该接口的假类)。将类的实例注入到需要通过构造函数访问配置值的每个类中。设置它,以便如果注入的值为 null,则它会创建正确类的实例。
public interface IMyConfig
{
string MyProperty { get; }
int MyIntProperty { get; }
}
public class MyConfig : IMyConfig
{
public string MyProperty
{
get { ...lazy load from the actual config... }
}
public int MyIntProperty
{
get { ... }
}
}
public class MyLibClass
{
private IMyConfig config;
public MyLibClass() : this(null) {}
public MyLibClass( IMyConfig config )
{
this.config = config ?? new MyConfig();
}
public void MyMethod()
{
string property = this.config.MyProperty;
...
}
}
Test
public void TestMethod()
{
IMyConfig config = MockRepository.GenerateMock<IMyConfig>();
config.Expect( c => c.MyProperty ).Return( "stringValue" );
var cls = new MyLib( config );
cls.MyMethod();
config.VerifyAllExpectations();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)