2016-08-02 45 views
0

這裏是我的目錄層次結構:Golang:如何在導入的包中重用測試代碼?

/ 
|-- main.go // package main, an HTTP server which accepts request and calls C/U APIs in pkg1 to finish certain task 
|-- main_test.go // wants to call veryfyTaskNumber in pkg1_test 
|-- pkg1 // package pkg1, CRUD APIs with Retrieve&Delete unexported for safety 
    |-- pkg1_test.go // contains a function verifyTaskNumber(*testing.T, taskName string, expectedNo int) which calls internal Retrieve function in pkg1 

我只在pkg1_test.go測試的一些實用功能。 main.go進口pkg1。現在我想在我的main_test.go中使用這些功能。搜索後,我發現兩種可能的解決方案,但它們都有一些缺點:

  • 將這些函數移動到pkg1.go。但是,這些函數可能包含在由go build生成的二進制文件中。
  • 移動這些功能到一個單獨的testutility包,然後將其導入手動在*_test.go。問題是這些函數在pkg1中使用了一些內部方法。

所以我想知道是否有更好的解決這個問題。

+2

通常你不想明確地使用未導出的函數測試代碼。我會認爲這是一種代碼味道,並探索其他方式來組織您的代碼。如果你提供更多細節,有人可能會幫助你更多。 – Corbin

+0

@Corbin更新。 – lz96

+0

我還補充一點,你不_have_調用從main_test.go測試功能。如果你正確地命名,你可以放手給你打電話。 (即前面帶有「測試」) https://golang.org/doc/code.html#Testing – cmp

回答

1

如果您在整個項目中使用*_test.go文件中的此功能,將其移至utils包並將其導入您的*_test.go是個不錯的主意。此外,由於此util包僅用於測試目的,因此我建議將pkg1的內部函數的輸出保存在支持文件中,並在調用支持包的功能時加載它,該功能應使用pkg1的專用功能。

+1

帶有測試工具的軟件包是最好的方法。 – cmp