【问题标题】:How to write clean integration tests如何编写干净的集成测试
【发布时间】:2020-01-16 21:33:58
【问题描述】:

我想使用 Go 和 MySQL 编写一个集成测试。但我很困惑如何做到这一点。我有 4 个函数:创建、获取、更新和删除。如果我只有一个测试函数来测试我的所有代码,这是一个好习惯吗?例如:

func TestCRUD(t *testing.T){
    t.Run("success case", func(t *testing.T){
         // call create func

         // call update func

         // call get func

         // call delete func
    })
}

如果我有上面的代码,我只有一个测试函数来测试我的所有代码。如果我想添加一个测试用例,我只需添加到TestCRUD() 函数。这是一个好习惯吗?

或者我应该为每个 CRUD 函数编写测试函数吗?所以我有4个测试功能,每个测试功能也有很多测试用例。如何编写干净的集成测试?

【问题讨论】:

  • 这真的取决于。很自然的事情是对四种方法中的每一种进行单独的测试。除非有充分的理由不这样做,例如如果您使用您创建的东西之后获取和删除。

标签: go testing integration-testing


【解决方案1】:

如果您考虑可维护性和简洁的代码,恕我直言,我建议您在不同的测试中测试每个 CRUD 函数。

关于您关于多个测试用例的问题,我想说一个好方法是使用 DDT(数据驱动测试或表驱动测试)。比如:

func Test_create(t *testing.T) {
    type args struct {
        // Define here your function arguments
        arg1 string,
        arg2 string,
    }
    tests := []struct {
        name string
        args args
        want bool // Your possible function output
    }{
    // TODO: Add test cases.
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            if got := create(tt.args.id); got != tt.want {
                t.Errorf("create() = %v, want %v", got, tt.want)
            }
        })
    }
}

使用gotests,您可以为您的函数生成干净而漂亮的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多