assert_called_once()或assert_called_xyz()....等价?

时间:2017-09-02 20:12:12

标签: unit-testing testing go

能够断言在我的测试中调用假/模拟方法的次数对我来说很重要,我想知道在没有使用像testify之类的东西的情况下最好的方法是什么。在我的例子中,对mocked方法的调用是一些递归调用的结果。

假设我有各种动物的表格驱动测试,我想断言Hello实际上是为某些测试而不是其他测试。在某些情况下,对于给定的测试(迭代切片),应该多次调用它。

在我的表驱动测试中添加一个计数器并对其进行断言是否合适?在我看来,也许有更好的方法来做到这一点。

如果我确实在hello方法中添加了一个计数器......在哪里处理并检查它。在假方法本身或在测试等?

type fakeFarmService struct {
	abc.someFarmServiceInterface
}

func (f *fakeFarmService) Hello(ctx context.Context, in *abc.FarmRequest) (*abc.FarmResponse, error) {
	if in.GetAnimal() == Monkey {
		return &abc.HelloResponse{}, nil
	}
	return nil, errors.New("an error")
}

1 个答案:

答案 0 :(得分:1)

我在结构上使用了counter的方法,然后在包级别单元测试中多次断言它在过去。尽管如此,它可能只是在程序包级别之前,当你想测试这样的内部断言时。我相信在Go中这是一种可接受的方式。如果您决定使用全局变量或同时运行测试,请注意正确同步对计数器的访问。

#[get("/foo")]
fn foo() -> Content<Json> {
    let r = json!({
        "foo": 1
    })
    Content(ContentType::new("application", "hal+json"), Json(r))
}

https://play.golang.org/p/RXKuLKIZwc(测试错误在游乐场内不起作用)

Go中高级测试的一些好材料

  1. Testing Techniques by Andrew Gerrand
  2. NewStore TechTalk - Advanced Testing with Go by Mitchell Hashimoto