当前位置: 首页 > 面试题库 >

仅在测试时,如何允许一个包访问另一个包的未导出数据?

段干弘扬
2023-03-14
问题内容

Go Programming Language 第11.2.4节中,有一个fmt.isSpace()通过IsSpacein
fmtexport_test.go文件声明访问外部测试的示例。这似乎是完美的解决方案,所以我就是这样做的:

a/a.go

package a

var x int

func Set(v int) {
    x = v
}

a/a_test.go

package a
import "testing"

func TestSet(t *testing.T) {
    Set(42)
    if x != 42 {
        t.Errorf("x == %d (expected 42)", x)
    }
}

func Get() int {
    return x
}

(运行go testa/工作正常。)

b/b.go

package b
import "path/to/a"

func CallSet() {
    a.Set(105)
}

b/b_test.go

package b
import (
    "testing"
    "path/to/a"
)

func TestCallSet(t *testing.T) {
    CallSet()
    if r := a.Get(); r != 105 {
        t.Errorf("Get() == %d (expected 105)", r)
    }
}

不幸的是,当我运行go testb/,我得到:

./b_test.go:11: undefined: a.Get

尝试同时运行两组测试go test ./...没有帮助。

经过一番摸索 __之后,我发现“ * _test.go文件
仅在

对该包
运行go测试时才
编译到该
包中
”(强调我的)。(因此,换句话说,我可以a.Get从中的a_test外部测试包访问a/,但不能从外部的任何包访问a/。)

我是否可以通过其他方法允许来自一个程序包的测试访问来自另一个程序包的内部数据,以进行集成测试?


问题答案:

我是否可以通过其他方法允许来自一个程序包的测试访问来自另一个程序包的内部数据,以进行集成测试?

不,没有。



 类似资料:
  • 问题内容: 我按照https://golang.org/doc/code.html#Workspaces链接中的说明进行操作,并构建了我的第一个Go程序。 因此,我尝试使用以下说明创建库= https://golang.org/doc/code.html#Library 一切都很完美,直到构建hello.go,它给了我这个错误。 /hello.go:10:13:未定义:stringutil.Rev

  • 我有一个包裹 现在我想禁止在之外的实现,但是应该是公共的,因为我将其用于。 如何做到这一点? 这有什么“套餐最终模式”吗? 你有过这样的情况吗? 详情: 我知道有可能只使用带有包私有构造函数的抽象类,而不是接口,但是和扩展不同的类,因此我需要多重继承(因为模拟多重继承(例如,见有效的Java项目18)在这里不起作用)。

  • 问题内容: 如何测试一个列表是否包含另一个列表(即它是一个连续的子序列)。假设有一个名为contains的函数: 编辑: 问题答案: 这是我的版本: 正如安德鲁·贾菲(Andrew Jaffe)在他的评论中指出的那样,它返回一个元组(start,end + 1),因为我认为这更像pythonic。它不对任何子列表进行切片,因此应该相当有效。 新手感兴趣的一点是,它使用了for语句上的else子句-

  • 类别:账户余额 我已经把这两个类都放在Balance.java和Account tBalance.java.这两个文件都在E:/程序/MyPack. Balance.java编译没有错误但是当我编译Account tBalance.java它给出错误:找不到符号"平衡". 我无法弄清楚为什么当两个类都在同一个包中声明时? 我正在使用javac B从MyPack编译alance.javajavac

  • 我是OOPs新手,如果这听起来很基本,我很抱歉。我有一个具有以下代码的类:- 现在假设我在同一个包中有另一个类“Main”。有什么方法我可以创建一个类的对象'内部'在'主'与类'外部'参考? 我尝试了以下操作(这是抛出错误):- “Main”和“Outer”类都在同一个包中。另外,我的主要目标是了解是否有任何方法可以在main方法中创建类Inner的对象,如下所示:-outerO1=newinne

  • 我们正在尝试创建一个Vue npm包,其中一个组件导入另一个组件(一个简单的例子可能是——该包包含一个通用按钮组件,以及一个使用my button组件进行分页的表组件)。我可以将子组件导入父组件并成功构建包。但是,当我在应用程序中导入并使用父组件(来自包)时,子组件内容不会显示。跳过它,就像它不在那里一样。 我不知所措。 我正在使用一些非常简单的组件进行测试: (编辑)这是我的索引。js文件 用法