Я пытаюсь начать использовать модульное тестирование в моем текущем проекте в 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 ()
.