Предположим, что я создаю функцию ежемесячной оплаты подписки для мобильного приложения, есть несколько способов выставить счет.Это может быть через Apple Pay, Google Кошелек, PayPal, Visa / Master зависит от платформы.Каждый провайдер имеет свою собственную реализацию и соответствующие тесты JUnit (так как они используют Java).
Чтобы оценить несколько базовых функций, есть несколько случаев, которые каждая реализация должна проверить.Итак, планируется написать базовые тесты и вызвать абстрактный метод проверки.
Вот мой подход,
public abstract class BaseBillingTest
{
public abstract BillCharger getBillCharger();
public abstract void ValidateTest1(Bill input, Bill output);
public void tests_case_1(){
Bill input = new Bill(<some value>);
Bill Output = getBillCharger().charge(input);
ValidateTest1(input, output);
}
}
Любой производный тестовый класс будет реализовывать абстрактные методы, поэтому он несет ответственность за реализацию методов проверки.Производный класс теста не должен знать, что происходит в базовом тесте, поскольку он может просто проверять выходные данные на основе входных данных.
Есть предложения, чтобы подойти к этому более элегантно?Есть ли шаблоны проектирования, которые я могу применить в этом сценарии?