网站首页图片尺寸,广东手机网站建设哪家好,wordpress php扩展,装修平台合作tdd java再次问好#xff01; 在上一篇博客文章中#xff0c;我在没有紧密引用Java的情况下总体上解释了TDD理论 #xff0c;但是在这一部分中#xff0c;我们开始进行TDD实践。 我们的目标是遍历TDD的所有阶段#xff1a;从需求分析到测试代码的重构。 我们将在具有Java 在上一篇博客文章中我在没有紧密引用Java的情况下总体上解释了TDD理论 但是在这一部分中我们开始进行TDD实践。 我们的目标是遍历TDD的所有阶段从需求分析到测试代码的重构。 我们将在具有JavaJUnit和“ fake”需求的示例中完成所有这些工作。 需求分析 假设我们需要在一个虚构的应用程序中创建一个新功能。 以下用户故事描述了此功能 作为用户我希望能够创建一个帐户。 该帐户应包含ID状态有效/无效区域和余额。 余额属性不能为负。 默认情况下帐户应处于活动状态在1区域中且余额为0.00。 这就是抽象开发团队中常见的用户故事。 在实践中需要在前端开发人员和后端开发人员之间分离功能。 我们还假设团队中已经存在一些代码约定等。 因此在将功能分配给我作为后端开发人员之后我需要澄清所有我不清楚的问题。 例如 区域属性的目的是什么 答在应用程序的交易中使用区域。 根据区域的不同我们会从帐户收取不同的费用。 目前我们仅计划3个区域。 好。 现在一切都清楚了我们可以开始TDD了。 Java TDD首次测试 这是我们在项目中需要具备的依赖项 dependenciesdependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.4/version/dependencydependencygroupIdorg.javamoney/groupIdartifactIdmoneta/artifactIdversion1.0/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version/dependencydependencygroupIdorg.hamcrest/groupIdartifactIdhamcrest-library/artifactIdversion1.3/version/dependency/dependencies 我使用Maven但是您也可以使用Gradle或任何其他依赖项管理工具。 最后我需要执行第一个实际的开发步骤创建空的Account类和相应的测试类。 那是Intellij IDEA中的项目结构 注意Account类的位置和AccountTest类。 它们具有相同的软件包名称但目录不同。 那是某种约定。 回顾用户故事我想创建以下单元测试 默认帐户创建 自定义帐户创建 检查负余额情况 以下是测试方法 package com.model;import org.javamoney.moneta.Money;
import org.junit.Test;import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;public class AccountTest {Testpublic void defaultAccountCreationTest() {Account account new Account();assertThat(account.getId().length(), equalTo(6));assertThat(account.getStatus(), equalTo(true));assertThat(account.getZone(), equalTo(Account.Zone.ZONE_1));assertThat(account.getBalance(), equalTo(Money.of(0.00, USD)));}Testpublic void customAccountCreationTest() {Account account new Account(false, Account.Zone.ZONE_3, 125.95);assertThat(account.getId().length(), equalTo(6));assertThat(account.getStatus(), equalTo(false));assertThat(account.getZone(), equalTo(Account.Zone.ZONE_3));assertThat(account.getBalance(), equalTo(Money.of(125.95, USD)));}Test(expected IllegalArgumentException.class)public void negativeBalanceTest() {Account account new Account(false, Account.Zone.ZONE_3, -200);}} 测试完成后就该看看我们在Account类中得到了什么。 因为在单元测试开发中我还在Account类中创建了所需方法构造函数和属性的伪声明。 业务逻辑实施 单元测试完成后我们需要在Account类中看到以下内容 package com.model;import org.javamoney.moneta.Money;public class Account {private String id;private boolean status;private Zone zone;private Money balance;public Account() {}public Account(boolean status, Zone zone, double balance) {}public enum Zone {ZONE_1, ZONE_2, ZONE_3}public String getId() {return id;}public boolean getStatus() {return status;}public Zone getZone() {return zone;}public Money getBalance() {return balance;}} 如上所示从功能的角度来看 Account类并不理想。 构造函数没有用所有属性均未初始化。 但是测试驱动的开发意味着在单元测试创建阶段会出现这种情况。 当我们为Account类运行单元测试时将得到“红色”结果。 因此使它们绿色的方法是从defaultAccountCreationTest开始 。 在此测试的上下文中我们必须更新Account类。 更改很小但是更改之后单元测试变为绿色。 package com.model;import org.apache.commons.lang3.RandomStringUtils;
import org.javamoney.moneta.Money;public class Account {private String id RandomStringUtils.randomAlphanumeric(6);private boolean status true;private Zone zone Zone.ZONE_1;private Money balance Money.of(0.00, USD);public Account() {}
//next code is omitted, it was not affected by the first changes 您可以运行更新的AccountTest类。 运行的结果是一个测试通过两个失败。 然后我们需要对每个单元测试重复此操作直到它们全部变为“绿色”为止。 那是Account类的最终版本 package com.model;import org.apache.commons.lang3.RandomStringUtils;
import org.javamoney.moneta.Money;public class Account {private String id RandomStringUtils.randomAlphanumeric(6);private boolean status true;private Zone zone Zone.ZONE_1;private Money balance Money.of(0.00, USD);public Account() {}public Account(boolean status, Zone zone, double balance) {this.status status;this.zone zone;if (balance 0)throw new IllegalArgumentException(The balance can not be negative);this.balance Money.of(balance, USD);}public enum Zone {ZONE_1, ZONE_2, ZONE_3}public String getId() {return id;}public boolean getStatus() {return status;}public Zone getZone() {return zone;}public Money getBalance() {return balance;}} 这是运行测试的屏幕截图 经过测试重构 可能在更复杂的示例中测试变成绿色后我将进行一些重构。 但是在这种简单情况下我们不需要这个。 如果您对提高代码的可读性或样式有任何建议请随时发表评论。 摘要 在本教程中我们研究了如何使用Java使用TDD进行开发 从功能分析开始以“绿色”单元测试和重构结束。 我试图在示例中解释TDD方法该方法虽然不太琐碎但也不太复杂。 无论如何我希望它对您有所帮助并提供有益的信息。 翻译自: https://www.javacodegeeks.com/2015/11/introduction-java-tdd-part-2.htmltdd java