单元测试 – 如何在不使用依赖注入的情况下从另一个包模拟函数?

前端之家收集整理的这篇文章主要介绍了单元测试 – 如何在不使用依赖注入的情况下从另一个包模拟函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有点像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

猜你在找的设计模式相关文章