介绍
我最后的两篇文章分别献给 行为研究设计模式, 它是通过类似于LEGO构建过程简化了测试的创建模式。这篇文章的部分自动化测试系列的设计模式,是要提出一个新的概念如何提高驱动测试更进一步的行为。这是要“通过引进行为的配置”的定义,以缓解行动。
UML类图

参与者
这些类以及参与增强对象行为研究设计模式是:
- IBehaviour -定义为所有行为的接口。只包含一个执行方法。
- ActionBehaviour -一切行动只行为的基类。只包含两个方法PerformAct和执行。
- UnityContainerFactory -创建并保持一个单一的全球实例为Unity IoC容器类。
- ItemPageNavigationBehaviour -对于一个具体的行为,我TEM 页类。它拥有一个导航逻辑。它是一个行动的行为。
- ItemPage -一个具体的网页对象,它提供了可以在页面上进行不同的服务操作。它是在特定的行为使用。
- BehaviourEngine -它是执行行为'的工作流的列表中的类。
- BehaviourDefinition -所有的行为“定义的基类。它拥有的定义的行为的类型。
- NavigatePageBehaviourDefinition -对于具体的定义ItemPageNavigationBehaviour。它扩展了BehaviourDefinition基类,包含了导航网址的财产。
什么是我们尝试解决问题?
行为的最初版本有一个重大的shortcoming-无法传递参数的行为。做他们的工作,他们需要一个静态的测试上下文类。另一个相当大的缺陷是,该行为“执行人是不灵活,这是很难改变其硬编码的工作流程。
通过定义增强行为研究设计模式
新概念在以前提高设计步骤。你可以在我以前的物品─阅读更多关于它在自动测试第1部分高级行为研究设计模式相比,早期的设计就是行为分成两个单独的类-行为和定义。主要区别。的定义保持所需的工作流的工作的所有参数。另一个变化是,引擎现在需要定义,而不是行为。
BehaviorDefinition基类
隐藏 复制代码
public abstract class BehaviorDefinition
{
public BehaviorDefinition(Type behaviorType)
{
this.BehaviorType = behaviorType;
}
internal Type BehaviorType { get; private set; }
}
没有什么特别的这个类。它仅持有其行为的基准。
浏览网页行为定义
隐藏 复制代码
public class NavigatePageBehaviorDefinition : BehaviorDefinition
{
public NavigatePageBehaviorDefinition(string expectedUrl) :
base(typeof(NavigatePageBehavior))
{
this.ExpectedUrl = expectedUrl;
}
internal string ExpectedUrl { get; private set; }
}
这是一个适用于导航页面的行为要求的各个参数的类。它包含导航网址。另外,我们通过类型NavigatePageBehaviour到基本构造。有必要对发动机的正常工作。
导航页行为变化
隐藏 复制代码
public class NavigatePageBehavior : ActionBehaviour
{
private readonly string expectedUrl;
public NavigatePageBehavior(NavigatePageBehaviorDefinition definition)
{
this.expectedUrl = definition.ExpectedUrl;
}
protected override void PerformAct()
{
Console.WriteLine(this.expectedUrl);
}
}
相比早期版本的不同之处在于导航网址现在从定义从代替的行为得到了。该单一职责原则更紧随其后。
增强的行为引擎
隐藏 复制代码
public static class BehaviorEngine
{
public static void Execute(params BehaviorDefinition[] behaviorDefinitions)
{
foreach (var definition in behaviorDefinitions)
{
var behavior =
UnityContainerFactory.GetContainer().Resolve(
definition.BehaviorType,
new ResolverOverride[]
{
new ParameterOverride("definition", definition)
}) as Behavior;
behavior.Execute();
}
}
}
我们通过定义的执行方法。然而,他们的行为被执行。他们通过统一的IoC容器获取基于定义的行为类型及其实例解析。团结注入目前的定义为“定义的构造函数的参数的参数覆盖的实例。
在测试定义行为研究
在测试中的使用非常简单。
隐藏 复制代码
[TestMethod]
public void Purchase_SimpleBehaviourEngine()
{
string itemUrl = "/Selenium-Testing-Cookbook-Gundecha-Unmesh/dp/1849515743";
BehaviorEngine.Execute(
new NavigatePageBehaviorDefinition(itemUrl));
}