В настоящее время я пытаюсь реорганизовать некоторые модульные тесты, потому что они содержат слишком много жестко запрограммированных данных. Структура класса следующая:
public class BaseClassValidator {
[Test]
public void TestAddress(){
Address a = GetAddress();
if (a != null){
// verify and validate here
Assert.AreEqual(..., ...);
}
}
[Test]
public void TestPhone(){
// almost the same as above, with GetPhone();
}
// ... other public methods here ...
protected Address GetAddress(){
return null;
}
protected Phone GetPhone(){
return null;
}
}
public class US: BaseClassValidator{
protected override Address GetAddress(){
Address address = new Address();
address.FirstName = "firstname";
// fill in the address data ...
return address;
}
// override GetPhone as well and other protected methods
}
и многие другие классы, используемые для той же цели — проверьте правильность адреса страны. Каждый подкласс должен переопределять методы для получения тестовых данных, и, как вы можете себе представить, это делает файл все больше и больше с входными данными, которые, на мой взгляд, могут быть получены/установлены по-разному. Кроме того, некоторые из этих подклассов определяют определенные элементы теста для проверки правильности или недействительности адреса с несколькими проверками, например:
public class US: BaseClassValidator {
// override the method GetAddress, as explained above ...
// define a new test method here...
[Test]
public void TestValidator {
Address a = GetAddress();
a.State = "KS";
// validate the address
// and assert that we get an error because state is wrong
Address a = GetAddress();
a.street = "";
// validate and assert that we get an error because street is wrong
// and so on...
}
}
Мне было интересно, есть ли лучший способ сделать это, так как кажется, что мы частично используем базовый класс для проверки некоторых данных, но для чего-то более конкретного мы используем подклассы - это может иметь смысл, но тогда кажется мы теряем преимущество использования шаблона, как показано выше. Что мне не нравится, так это способ создания данных, потому что при другом подходе, например, при использовании тестов, управляемых данными, мы могли бы читать тестовые данные из файла (например, xml).
Есть ли лучший способ обмена данными между тестами? Как вы справляетесь с такого рода ситуациями?