Skip to Content
学习测试驱动开发
book

学习测试驱动开发

by Saleem Siddiqui
July 2025
Intermediate to advanced
280 pages
3h 5m
Chinese
O'Reilly Media, Inc.
Book available
Content preview from 学习测试驱动开发

第 3 章 投资组合 投资组合

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

一分钱聪明,一块钱愚蠢。1

累人谚语

我们可以用数字乘除任何一种货币的金额。现在,我们需要将多种货币的金额相加。

5 美元 x 2 = 10 美元

10 欧元 x 2 = 20 欧元

4002 韩元 / 4 = 1000.5 韩元

5 美元 + 10 欧元 = 17 美元

1 美元 + 1100 克鲁瓦 = 2200 克鲁瓦

删除多余的Money 乘法测试

在本章中,我们将处理货币的混合模式加法。

设计下一个测试

要测试驱动下一个功能--5 美元 + 10 欧元 = 17 美元--首先勾勒出我们的程序将如何发展是很有启发性的。TDD 与软件设计相得益彰,这与流行的说法相反!

如我们的功能列表所述,假设兑换 1 欧元可获得 1.2 美元,那么 5 美元和 10 欧元相加应为 17 美元。

然而,事实同样如此:

1 EUR + 1 EUR = 2.4 USD

或者说,相当明显:

1 EUR + 1 EUR = 2 EUR

顿悟当我们把两个(或更多)Money ,只要我们知道所涉及的所有货币之间的汇率(即从每个Money 的货币兑换成我们想要表示结果的货币),结果可以用任何货币表示。即使所涉及的所有货币都是相同的,情况也是如此,就像上一个例子一样,这只是众多例子中的一个特殊例子。

提示

测试驱动开发让我们有机会在每个 RGR 周期后暂停一下,有意识地设计我们的代码。

我们知道,"美元加美元,结果是美元 "的说法过于简单。 一般的原则是,将Money 不同货币的实体相加,就得到Portfolio ,然后我们可以用任何一种货币来表示(给定货币之间的必要汇率)。

我们是否刚刚引入了一个新实体:Portfolio ?当然!让我们的代码反映我们领域的实际情况至关重要。我们正在编写代码,以表示股票持有量的集合,正确的术语是投资组合2

当我们添加两个或更多Money 实体时,我们应该得到一个Portfolio 。我们可以扩展这个领域模型,说我们应该能够在任何特定currencyevaluate 一个Portfolio 。这些名词和动词让我们了解了代码中的新抽象,我们将通过测试来实现这些新抽象。

提示

分析问题领域是发现新实体、关系、功能和方法的有效方法。

鉴于这一新的认识,让我们先添加两个使用相同货币的Money 实体这种比较简单的情况,把使用多种货币的情况推迟到以后:

5 美元 x 2 = 10 美元

10 欧元 x 2 = 20 欧元

4002 韩元 / 4 = 1000.5 韩元

5 美元 + 10 美元 = 15 美元

5 美元 + 10 欧元 = 17 美元

1 美元 + 1100 克鲁瓦 = 2200 克鲁瓦

删除多余的Money 乘法测试

让我们构建这个功能:将Money 实体添加到一起。我们将从一个测试开始,使用Portfolio 作为新实体,在同一货币中添加两个Money 实体。

Go

下面是我们的新测试TestAddition ,它是在money_test.go 中的现有测试 之后添加的:

func TestAddition(t *testing.T) {
    var portfolio Portfolio 
    var portfolioInDollars Money

    fiveDollars := Money{amount ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Python-Tricks

Python-Tricks

Dan Bader
Filling Execution Gaps

Filling Execution Gaps

Todd C. Williams
Mining the Social Web, 3rd Edition

Mining the Social Web, 3rd Edition

Matthew A. Russell, Mikhail Klassen

Publisher Resources

ISBN: 9798341663183Supplemental Content