Тестовый проект и файл конфигурации - PullRequest
2 голосов
/ 28 мая 2009

У меня есть такой вид настройки в моем решении Visual Studio 2008: один проект службы WCF (WCFService), который использует библиотеку (Lib1, для которой требуются некоторые записи конфигурации в файле app.config) У меня есть проект модульных тестов (MSTest), который содержит тесты, связанные с Lib1. Чтобы запустить эти тесты, мне нужен файл конфигурации в тестовом проекте. Есть ли способ загрузить его автоматически из WCFService, поэтому мне не нужно менять записи конфигурации в двух местах?

1 Ответ

2 голосов
/ 28 мая 2009

Наличие в вашей библиотеке свойств чтения непосредственно из файла app.config по всему коду сделает ваш код хрупким и трудным для тестирования. Было бы лучше иметь класс, отвечающий за чтение конфигурации и сохранение значений конфигурации строго типизированным способом. Пусть этот класс либо реализует интерфейс, который определяет свойства из конфигурации, либо делает свойства виртуальными. Затем вы можете макетировать этот класс (используя фреймворк, такой как RhinoMocks, или вручную создав поддельный класс, который также реализует интерфейс). Вставьте экземпляр класса в каждый класс, которому требуется доступ к значениям конфигурации через конструктор. Настройте его так, чтобы, если введенное значение было нулевым, оно создавало экземпляр соответствующего класса.

 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();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...