mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-10-28 09:02:45 +00:00
deploy: 3a20d238d9
This commit is contained in:
@@ -579,18 +579,15 @@ func TestCheckQuotaNotifiesUser(t *testing.T) {
|
||||
<pre><code>$ go list -f={{.GoFiles}} fmt
|
||||
[doc.go format.go print.go scan.go]
|
||||
</code></pre>
|
||||
<p>{% endraw %}</p>
|
||||
<p>TestGoFiles表示的是fmt包内部测试代码,以_test.go为后缀文件名,不过只在测试时被构建:</p>
|
||||
<pre><code>$ go list -f={{.TestGoFiles}} fmt
|
||||
[export_test.go]
|
||||
</code></pre>
|
||||
<p>{% endraw %}</p>
|
||||
<p>包的测试代码通常都在这些文件中,不过fmt包并非如此;稍后我们再解释export_test.go文件的作用。</p>
|
||||
<p>XTestGoFiles表示的是属于外部测试包的测试代码,也就是fmt_test包,因此它们必须先导入fmt包。同样,这些文件也只是在测试时被构建运行:</p>
|
||||
<pre><code>$ go list -f={{.XTestGoFiles}} fmt
|
||||
[fmt_test.go scan_test.go stringer_test.go]
|
||||
</code></pre>
|
||||
<p>{% endraw %}</p>
|
||||
<p>有时候外部测试包也需要访问被测试包内部的代码,例如在一个为了避免循环导入而被独立到外部测试包的白盒测试。在这种情况下,我们可以通过一些技巧解决:我们在包内的一个_test.go文件中导出一个内部的实现给外部测试包。因为这些代码只有在测试时才需要,因此一般会放在export_test.go文件中。</p>
|
||||
<p>例如,fmt包的fmt.Scanf函数需要unicode.IsSpace函数提供的功能。但是为了避免太多的依赖,fmt包并没有导入包含巨大表格数据的unicode包;相反fmt包有一个叫isSpace内部的简易实现。</p>
|
||||
<p>为了确保fmt.isSpace和unicode.IsSpace函数的行为保持一致,fmt包谨慎地包含了一个测试。一个在外部测试包内的白盒测试,是无法直接访问到isSpace内部函数的,因此fmt通过一个后门导出了isSpace函数。export_test.go文件就是专门用于外部测试包的后门。</p>
|
||||
|
||||
Reference in New Issue
Block a user