diff --git a/src/Ch15_Smart_Pointers.md b/src/Ch15_Smart_Pointers.md index 99df779..15a5b0e 100644 --- a/src/Ch15_Smart_Pointers.md +++ b/src/Ch15_Smart_Pointers.md @@ -831,13 +831,13 @@ error: could not compile `sp_demos` due to previous error; **A Use Case for Interior Mutability: Mock Objects** -有的时候,在测试期间,编程者为了观察到特定行为,并断言该行为有被正确实现,就会在某个类型处使用另一类型。这样的占位类型,叫做 *测试替身,test double*。请将其设想为电影工业中的 “特技替身,stunt double”,即某人介入进来并代替某名演员完成特别棘手的一个场景。在测试时,测试替身代表了其他类型。所谓模拟对象,就是记录测试过程中,发生了些什么,如此咱们就可以确定出那些正确操作有发生的一些特定类型。 +有时在测试过程中,程序员会使用一个类型来代替另一类型,以便观察特定的行为并断定其实现是正确的。这种占位符类型被称为 *测试替身,test double*。请从电影制作中的“特技替身,stunt double”的角度来考虑他,某人代替一名演员来完成特别棘手的一场戏。当咱们运行测试时,测试替身代表其他类型。*模拟对象,mock objects* 是特定类型的测试替身,他记录了测试过程中发生的事情,因此咱们可以断言发生了正确的动作。 -Rust 没有如同其他有着对象的语言,同样意义上的那些对象,且 Rust 没有如同一些其他语言那样,内建到标准库中的模拟对象功能。然而,咱们是绝对可以创建出,将起到与模拟对象相同的作用,这样的结构体的。 +Rust 没有像其他语言那样拥有对象,Rust 也没有像其他一些语言那样在标准库中内置模拟对象功能。但是,咱们绝对可以创建一个与模拟对象具有相同用途的结构。 -以下就是这里将测试的场景:这里将创建根据最大值而追踪某个值,并根据最大值与当前值的接近程度,发出一些消息的库。这样的库,比如就可被用于追踪用户的允许调用 API 次数配额。 +下面是我们要测试的情景:我们将创建一个库,跟踪某个数值与最大值的关系,并根据当前数值与最大值的接近程度发送消息。例如,这个库可以用来跟踪用户允许调用的 API 数量配额。 -这个库将提供对某个值接近最大值程度的追踪,以及在什么时刻发出什么消息的功能。使用这个库的应用,预期将提供发送消息的机制:应用可将某条消息放置于该应用中,或者发出一封电子邮件,或者发出一条手机短信,抑或别的什么。这个库则无需清楚那样的细节。他所需的全部,即是实现一个这里将提供的、名为 `Messenger` 的一个特质。下面清单 15-20 给出了该库的代码: +这个库将提供跟踪某个值接近最大值的程度,及在什么时刻发出什么消息的功能。使用这个库的应用,将被期望提供发送消息的机制:应用可以在应用中中放置消息、发送电子邮件、发出手机短信或其他东西。这个库不需要知道这个细节。他所需的只是实现咱们将提供的名为 `Messenger` 特质的东西。以下清单 15-20 给出库的代码: 文件名:`src/lib.rs`