This commit is contained in:
Xargin 2016-04-26 20:39:04 +08:00
parent 2dfef72119
commit 9194f5f455
2 changed files with 4 additions and 4 deletions

View File

@ -41,7 +41,7 @@ func echo(newline bool, sep string, args []string) error {
} }
``` ```
在测试中我们可以用各种参数和标志调用echo函数然后检测它的输出是否正确, 我们通过增加参数来减少echo函数对全局变量的依赖。我们还增加了一个全局名为out的变量来替代直接使用os.Stdout这样测试代码可以根据需要将out修改为不同的对象以便于检查。下面就是echo_test.go文件中的测试代码 在测试中我们可以用各种参数和标志调用echo函数然后检测它的输出是否正确, 我们通过增加参数来减少echo函数对全局变量的依赖。我们还增加了一个全局名为out的变量来替代直接使用os.Stdout这样测试代码可以根据需要将out修改为不同的对象以便于检查。下面就是echo_test.go文件中的测试代码
```Go ```Go
package main package main

View File

@ -2,13 +2,13 @@
一种测试分类的方法是基于测试者是否需要了解被测试对象的内部工作原理。黑盒测试只需要测试包公开的文档和API行为内部实现对测试代码是透明的。相反白盒测试有访问包内部函数和数据结构的权限因此可以做到一下普通客户端无法实现的测试。例如一个白盒测试可以在每个操作之后检测不变量的数据类型。白盒测试只是一个传统的名称其实称为clear box测试会更准确。 一种测试分类的方法是基于测试者是否需要了解被测试对象的内部工作原理。黑盒测试只需要测试包公开的文档和API行为内部实现对测试代码是透明的。相反白盒测试有访问包内部函数和数据结构的权限因此可以做到一下普通客户端无法实现的测试。例如一个白盒测试可以在每个操作之后检测不变量的数据类型。白盒测试只是一个传统的名称其实称为clear box测试会更准确。
黑盒和白盒这两种测试方法是互补的。黑盒测试一般更健壮,随着软件实现的完善测试代码很少需要更新。它们可以帮助测试者了解真客户的需求也可以帮助发现API设计的一些不足之处。相反白盒测试则可以对内部一些棘手的实现提供更多的测试覆盖。 黑盒和白盒这两种测试方法是互补的。黑盒测试一般更健壮,随着软件实现的完善测试代码很少需要更新。它们可以帮助测试者了解真客户的需求也可以帮助发现API设计的一些不足之处。相反白盒测试则可以对内部一些棘手的实现提供更多的测试覆盖。
我们已经看到两种测试的例子。TestIsPalindrome测试仅仅使用导出的IsPalindrome函数因此这是一个黑盒测试。TestEcho测试则调用了内部的echo函数并且更新了内部的out包级变量这两个都是未导出的因此这是白盒测试。 我们已经看到两种测试的例子。TestIsPalindrome测试仅仅使用导出的IsPalindrome函数因此这是一个黑盒测试。TestEcho测试则调用了内部的echo函数并且更新了内部的out包级变量这两个都是未导出的因此这是白盒测试。
当我们准备TestEcho测试的时候我们修改了echo函数使用包级的out变量作为输出对象因此测试代码可以用另一个实现代替标准输出这样可以方便对比echo输出的数据。使用类似的技术我们可以将产品代码的其他部分也替换为一个容易测试的伪对象。使用伪对象的好处是我们可以方便配置容易预测更可靠也更容易观察。同时也可以避免一些不良的副作用例如更新生产数据库或信用卡消费行为。 当我们准备TestEcho测试的时候我们修改了echo函数使用包级的out变量作为输出对象因此测试代码可以用另一个实现代替标准输出这样可以方便对比echo输出的数据。使用类似的技术我们可以将产品代码的其他部分也替换为一个容易测试的伪对象。使用伪对象的好处是我们可以方便配置容易预测更可靠也更容易观察。同时也可以避免一些不良的副作用例如更新生产数据库或信用卡消费行为。
下面的代码演示了为用户提供网络存储的web服务中的配额检测逻辑。当用户使用了超过90%的存储配额之后将发送提醒邮件。 下面的代码演示了为用户提供网络存储的web服务中的配额检测逻辑。当用户使用了超过90%的存储配额之后将发送提醒邮件。(译注一般在实现业务机器监控包括磁盘、cpu、网络等的时候需要类似的到达阈值=>触发报警的逻辑,所以是很实用的案例)
<u><i>gopl.io/ch11/storage1</i></u> <u><i>gopl.io/ch11/storage1</i></u>
```Go ```Go
@ -48,7 +48,7 @@ func CheckQuota(username string) {
} }
``` ```
我们想测试这代码但是我们并不希望发送真实的邮件。因此我们将邮件处理逻辑放到一个私有的notifyUser函数中。 我们想测试这代码但是我们并不希望发送真实的邮件。因此我们将邮件处理逻辑放到一个私有的notifyUser函数中。
<u><i>gopl.io/ch11/storage2</i></u> <u><i>gopl.io/ch11/storage2</i></u>
```Go ```Go