Модульное тестирование абстрактных классов и / или интерфейсов

Я пытаюсь начать использовать модульное тестирование в моем текущем проекте в Visual Studio 2010. Моя структура класса, однако, содержит ряд отношений наследования интерфейса и абстрактного класса.

Если два класса являются унаследованный от одного и того же абстрактного класса или интерфейса, я хотел бы иметь возможность совместно использовать тестовый код между ними. Я не знаю, как именно это сделать. Я думаю, что создаю тестовый класс для каждого интерфейса, который хочу протестировать, но я не уверен, как правильно передать мои конкретные классы в применимые модульные тесты.


Обновление

Хорошо, вот пример. Скажем, у меня есть интерфейс IEmployee, который реализуется абстрактным классом Employee, который затем наследуется двумя конкретными классами Worker и Employee. (Код показан ниже)

Теперь предположим, что я хочу создать тесты, применимые ко всем сотрудникам IE или сотрудникам. Или, в качестве альтернативы, создайте специальные тесты для определенных типов сотрудников. Например, я могу утверждать, что установка IEmployee.Number на число меньше нуля для любой реализации IEmployee вызывает исключение. Я бы предпочел писать тесты с точки зрения любого сотрудника IE, а затем иметь возможность использовать тесты в любой реализации IEmployee.

Вот еще один пример. Я также могу утверждать, что установка времени отпуска для любого сотрудника на значение меньше нуля бросков и ошибок. Тем не менее, мне также могут потребоваться разные тесты, применимые к конкретной конкретной версии Employee. Скажем, я хочу проверить, что Worker выдает исключение, если им предоставляется отпуск на срок более 14 дней, но менеджер может быть предоставлен до 36 дней.

public interface IEmployee
{
    string Name {get; set;}
    int Number {get; set;}
}


public abstract class Employee:IEmploee
{
    string Name {get; set;}
    int Number {get;set;}
    public abstract int VacationTime(get; set;)
}


public abstract class Worker:IEmployee
{
    private int v;

    private int vTime;
    public abstract int VacationTime
    {
       get
       {
         return VTime;
       }
       set
      { 
         if(value>36) throw new ArgumentException("Exceeded allowed vaction");
         if(value<0)throw new ArgumentException("Vacation time must be >0");
         vTime= value;
       }
    }


    public void DoSomWork()
    {
      //Work
    }
}


public abstract class Manager:IEmployee
{
    public abstract int VacationTime
    {
       get
       {
         return VTime;
       }
       set
      { 
         if(value>14) throw new ArgumentException("Exceeded allowed vaction");
         if(value<0)throw new ArgumentException("Vacation time must be >0");
         vTime= value;
       }
    }

  public void DoSomeManaging()
  {
      //manage
  }

}

Итак, я предполагаю, что я ищу рабочий процесс, который позволит мне вложить модульные тесты. Так, например, когда я тестирую класс Manager, я хочу сначала проверить, проходит ли он тесты Employee и IEmployee, а затем протестировать определенные члены, такие как DoSomeManaging () .

8
задан Eric Anastas 16 September 2010 в 23:21
поделиться