测试项目和配置文件

时间:2009-05-28 11:35:02

标签: .net wcf unit-testing

我在Visual Studio 2008解决方案中有这种设置:一个WCF服务项目(WCFService)使用库(Lib1,它需要app.config文件中的一些配置条目)。我有一个单元测试项目(MSTest),其中包含与Lib1相关的测试。为了运行这些测试,我需要在测试项目中使用配置文件。有没有办法从WCFService自动加载它,所以我不需要在两个地方更改配置条目?

1 个答案:

答案 0 :(得分:2)

让您的库直接从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;

          ...
      }
 }

测试

 public void TestMethod()
 {
      IMyConfig config = MockRepository.GenerateMock<IMyConfig>();
      config.Expect( c => c.MyProperty ).Return( "stringValue" );

      var cls = new MyLib( config );

      cls.MyMethod();

      config.VerifyAllExpectations();
 }