域对象 (
俄语,“域对象” )-在脚本逻辑中直接使用测试数据的最流行方法之一。 目前,由于其
简单性,可理解性和逻辑性 ,它是最受欢迎和广泛使用的方法之一
。它适用于所有类型的功能测试自动化(端到端,API,集成),无论所测试的平台是Web,移动还是台式机。
重要说明 :不要将域对象与数据传输对象(DTO)混淆。 这些是在不同领域中应用的完全不同的方法。
它的本质是什么?从方法的另一个名称“业务对象”可以清楚地看出,这是一种抽象,是对象的模型和描述,对于理解和运行
应用程序的
业务逻辑很重要。 除了将字段及其值“转移”到一个特定的业务部门外,它不能执行任何其他功能。

看起来像什么
例如,请使用提供用户帐户创建功能的任何应用程序。 成为我们域对象的用户。 在几乎所有情况下,用户都必须具有用户名和密码:
特别小心的人会注意到所有内部字段都是私有的。 直接从对象的字段设置和读取值被认为是不好的做法。 相反,习惯上使用众所周知的getter和setter:
public class User { private String login; private String password;
现在,我们可以访问这些字段,并且可以设置和读取它们的值。 但是在此示例中,我们仅使用两个字段。 如果这些字段中有十五个会发生什么? 的确,由于吸气剂和吸气剂无休止的复制粘贴,User类扩展到了前所未有的大小。 我们将如何处理呢?
魔术龙目岛
这就是
Project Lombok抢救的地方-一个流行的库,它使我们可以减少代码几次,避免复制/粘贴的麻烦,并显着减少编写数据对象类所需的时间。 一些有用的链接:
他在做什么? 通过为类分配相应的注释,自动为该类的所有字段创建getter和setter方法:
import lombok.Getter; import lombok.Setter;
简单,快速,方便。 因此,我们的代码更具可读性,类更简洁,开发速度更快。
申请测试
好的测试是将测试数据,测试逻辑及其实现清晰地分开的测试。让我们尝试登录我们的用户。 我们用测试数据创建一个类,并用一个新的用户“填充”它们:
我们描述“登录”页面的模型:
public class LoginPage {
它仅用于实现测试类:
public class LoginTest { @Test public void loginAsDefaultUser() {
做完了! 你真棒!
总结一下
最后,我们获得了一个
简洁的项目体系结构,将逻辑,数据和实现清楚地分开了。 Lombok可帮助您摆脱代码重复,Domain Object与Page Object的理念完美契合,并且代码支持成为一种真正的乐趣。
应该有缺点吗?- 免疫力。 或更确切地说,它的缺失。 在这种情况下,使用Lombok的这种方法就输给了主要竞争对手-Builder ( 有关Habré的文章 )。 但是,我认为,与构建器中的无穷链和Object类中的方法堆相比,上述代码更“干净”,可理解且在美学上令人愉悦。
- 在不需要的地方增加复杂性。 没有那么小的提醒。 任何方法或模式都存在问题,应该解决某个问题。 您不应在仅检查2 + 2 = 4的单元测试中尝试使用数据对象。
非常感谢您的关注。 我将很高兴评论和批评。
PS在评论中告诉您您在工作中使用的方法。 读起来会很有趣。