Go
「已注销」
这个作者很懒,什么都没留下…
展开
-
GoLang - Go中Mocking(3)
仍然还有一些问题还有一个重要的特性,我们还没有测试过。Countdown 应该在第一个打印之前 sleep,然后是直到最后一个前的每一个,例如:SleepPrint NSleepPrint N-1Sleepetc我们最新的修改只断言它已经 sleep 了 4 次,但是那些 sleeps 可能没按顺序发生。当你在写测试的时候,如果你没有信心,你的测试将给你足够的信心,尽管推翻它!(不过首先要确定你已经将你的更改提交给了源代码控制)。将代码更改为以下内容。func Countdown(ou原创 2020-07-22 23:14:46 · 14640 阅读 · 0 评论 -
GoLang - Go中Mocking(2)
尝试并运行测试countdown_test.go:21: got ‘3’ want ‘321Go!’写足够的代码令测试通过func Countdown(out io.Writer) {for i := 3; i > 0; i-- {fmt.Fprintln(out, i)}fmt.Fprint(out, “Go!”)}使用 for 循环与 i-- 反向计数,并且用 fmt.println 打印我们的数字到 out,后面跟着一个换行符。最后用 fmt.Fprint 发送 「Go!原创 2020-07-22 23:13:56 · 176779 阅读 · 0 评论 -
GoLang - Go中Mocking(1)
Mocking你可以在这里找到本章的所有代码现在需要你写一个程序,从 3 开始依次向下,当到 0 时打印 「GO!」 并退出,要求每次打印从新的一行开始且打印间隔一秒的停顿。321Go!我们将通过编写一个 Countdown 函数来处理这个问题,然后放入 main 程序,所以它看起来这样:package mainfunc main() {Countdown()}虽然这是一个非常简单的程序,但要完全测试它,我们需要像往常一样采用迭代的、测试驱动的方法。所谓迭代是指:确保我们采取最原创 2020-07-22 23:12:37 · 20943 阅读 · 0 评论 -
GoLang - Go中闭包用法
当我们不希望给函数起名字的时候,可以使用匿名函数,例如:func(x, y int) int { return x + y }。这样的一个函数不能够独立存在(编译器会返回错误:non-declaration statement outside function body),但可以被赋值于某个变量,即保存函数的地址到变量中:fplus := func(x, y int) int { return x + y },然后通过变量名对函数进行调用:fplus(3,4)。当然,您也可以直接对匿名函数进行调用:fu原创 2020-07-22 23:05:19 · 21876 阅读 · 0 评论 -
GoLang - Go中接口的用法
Go-接口接口是定义了合约但并没有实现的类型。举个例子:type Logger interface {Log(message string)}那这样做有什么作用呢?其实,接口有助于将代码与特定的实现进行分离。例如,我们可能有各种类型的日志记录器:type SqlLogger struct { … }type ConsoleLogger struct { … }type FileLogger struct { … }针对接口而不是具体实现的编程会使我们很轻松的修改(或者测试)任何代码都不会产原创 2020-07-22 22:51:29 · 18314 阅读 · 0 评论