【发布时间】:2020-12-11 06:11:49
【问题描述】:
我希望在测试中模拟结构的方法以提高代码覆盖率。 有一些关于这个的帖子,没有一个对我有用。我可能完全搞错了。
main/file1.go
type application struct {
Name string
}
func (app *application) find() error {
// perform function logic
return nil
}
func main() {
app := &application{
Name: "Main Application",
}
err := app.find()
if err != nil {
fmt.Printf("Error in find call: %s\n", err)
}
}
我需要能够对find() 进行模拟测试并返回error(我不想生成可能导致错误的测试用例,因为这不在我的控制范围内,我不确定如何通过传递可接受的参数来生成一个)。
我试图按照this 帖子的第二个答案,编译器不喜欢它。
main/file1_test.go
func Test_application_find(t *testing.T) {
tests := []struct {
name string
app *application
wantErr string
}{
{
name: "generate error",
app: &application{
Name: "Mock Application",
},
wantErr: true,
},
}
for _, tt := range tests {
mockCaller := tt.app.find // this works fine
tt.app.find = func() error { // this assignment errors out
return fmt.Errorf("Mock Error Message")
}
defer func() {
tt.app.find = mockCaller // this assignment errors out
}()
t.Run(tt.name, func(t *testing.T) {
if err := tt.app.find(); (err != nil) && (err.Error() != "Mock Error Message") {
t.Errorf("error = %s, wantErr %s", err.Error(), tt.wantErr)
}
}
}
}
我在这里做错了什么?请提出建议。
【问题讨论】:
标签: go testing methods struct mocking