Я написал тестовую автоматизацию. Структура основывается на объектах и действиях. Объектом может быть текстовое поле. Действия для него могут быть такими, как набор текста, четкость, проверка-текст, подтверждение и т. Д. Структура не зависит от ацитонов, поэтому мы можем добавлять больше действий с течением времени, не задумываясь о самой структуре. Я рассмотрел два подхода к действиям. Первый - использовать шаблон команды. В этом случае я бы интерфейс, который выглядит примерно так:
Ищете альтернативу командной строки
public interface IAction
{
void Execute(StringDictionary properties);
}
Вопрос заключается в том, что мы в конечном итоге со многими эти командные классы.
public class SetTextAction : IAction
{
public void Execute(StringDictionary properties)
{
}
}
public class ClearAction : IAction
{
public void Execute(StringDictionary properties)
{
}
}
public class VerifyTextAction : IAction
{
public void Execute(StringDictionary properties)
{
}
}
public class VerifyEnabledAction : IAction
{
public void Execute(StringDictionary properties)
{
}
}
Кроме того любой общий код необходимо будет в еще одном классе. Похоже, что коэффициент усиления шума в коде увеличивается.
Альтернатива, которую я придумал, заключается в использовании класса утилиты для типа и методов действий.Это заканчивает тем, как это:
public class TextboxActions
{
public static void set-text(StringDictionary properties)
{
}
public static void clear(StringDictionary properties)
{
}
public static void verify-text(StringDictionary properties)
{
}
public static void verify-enabled(StringDictionary properties)
{
}
}
Это имеет то преимущество, что код для текстовых полей это все вместе. Кроме того, любой код, который является общим для нескольких действий, может быть в одном классе. К сожалению, этот подход требует, чтобы я использовал отражение, чтобы «найти» метод действия. Это, очевидно, не безопасно и может занять много времени. Это достаточно медленно, что я добавил кеш, поэтому мне не нужно искать одно и то же действие дважды, но это добавляет сложности кода.
Любое из этих решений работает, но оба они имеют нежелательные характеристики. Есть ли альтернативный подход к этой проблеме, который кто-то может предложить?
Спасибо, я закончил с чем-то вроде этого. –