在Go中测试Unexported函数

时间:2017-09-27 14:53:51

标签: unit-testing go private-methods

我有一个名为example.go的文件和另一个名为example_test.go的测试文件,它们都在同一个包中。我想在example.go

中测试一些未导出的函数

当我运行测试时,未example_test.go中的未导出函数未定义。我想知道在同一个包中的测试文件中测试未导出函数的最佳约定是什么?

3 个答案:

答案 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/进行测试。