我有一个名为example.go
的文件和另一个名为example_test.go
的测试文件,它们都在同一个包中。我想在example.go
当我运行测试时,未example_test.go
中的未导出函数未定义。我想知道在同一个包中的测试文件中测试未导出函数的最佳约定是什么?
答案 0 :(得分:5)
如果您的文件真的在同一个包中,这应该不是问题。我可以毫无问题地运行以下测试。
目录结构:
public ActionResult SavePermissions(string pStrPermissions)
{
var lLstObjResult = new Dictionary<string, object>();
try
{
SecurityFactory.GetPermissionService().UpdateList(JsonConvert.DeserializeObject<IList<Permission>>(pStrPemissions));
lLstObjResult.Add(MESSAGE, "Registro guardado exitosamente");
lLstObjResult.Add(SUCCESS, true);
}
catch (Exception e)
{
lLstObjResult.Add(MESSAGE, e.Message);
lLstObjResult.Add(SUCCESS, false);
}
return Json(lLstObjResult, JsonRequestBehavior.AllowGet);
}
example.go:
~/Source/src/scratch/JeffreyYong-Example$ tree .
.
├── example.go
└── example_test.go
example_test.go
package example
import "fmt"
func unexportedFunc() {
fmt.Println("this totally is a real function")
}
测试命令:
〜/ Source / src / scratch / JeffreyYong-示例$ go test -v。
输出:
package example
import "testing"
func TestUnimportedFunc(t *testing.T) {
//some test conditions
unexportedFunc()
}
答案 1 :(得分:3)
这也将适用于私有类型的私有成员函数。
例如。
abc.go如下
package main
type abc struct {
A string
}
func (a *abc) privateFunc() {
}
abc_test.go如下
package main
import "testing"
func TestAbc(t *testing.T) {
a := new(abc)
a.privateFunc()
}
对此进行运行go测试应该可以让您获得完整的通过,而不会出现任何错误。
linux-/bin/bash@~/trials/go$ go test -v
=== RUN TestAbc
--- PASS: TestAbc (0.00s)
PASS
ok _/home/george/trials/go 0.005s
答案 2 :(得分:0)
运行go test /path/to/testfile_test.go
不会自动编译/path/to/testfile.go
您可以改为使用go test /path/to/
进行测试。