有点像golang初学者,但之前我曾经使用过测试框架.如何在不注入依赖项的情况下嘲笑和伪造依赖方法返回的内容?我之所以不想使用依赖注入,是因为正在使用许多外部包方法,并且在构造函数中注入所有方法都很笨重.
我搜索了这个在线/ stackoverflow,解决方案是始终使用依赖注入.有时这不是一个可行的选择.
这是我正在尝试以代码方式执行的操作:
B / b_test.go
package b func TestResults(t *testing.T) { t.Run("Test",func(t *testing.T) { b := NewB() // How do I mock out and fake a.DoSomething() to be // "complete" instead of whats in the code right now? result = b.Results() assert.Equal(t,"complete",result) } }
B / b.go
package b import "a" type B struct {} func NewB() B { return &B{} } func (b B) Results() { return a.DoSomething() }
A / a.go
package a func DoSomething() { return "done" }
谢谢!
你可以使用
conditional compilation with build tags
A / a.go
// +build !mock package a func DoSomething() { return "done" }
A / a_mock.go
// +build mock package a func DoSomething() { // Insert fake implementation here return "complete" }
$go test -tags mock