为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中测试生命周期。是否可以在不重复代码的情况下添加拆卸方法?

在 Go 中测试生命周期。是否可以在不重复代码的情况下添加拆卸方法?

Go
斯蒂芬大帝 2023-05-08 15:27:38
我一个月前开始使用 Go。我来自 java/kotlin 背景,我想了解是否有可能实现我在这些语言中所做的一些相同的事情,即使是在 Go 中。我目前的问题是这个。我有一组集成测试用例,我需要在其中初始化一些东西然后清理资源:我相信这是一个常见的用例。如果可能的话,这是我想要实现的一些伪代码:for each test {  init resources  run test {     init test resources     execute method under test     assert  }  clean resources}目前,我可以尝试的是这种方法:func TestMain(m *testing.M) {    setup()    code := m.Run()     shutdown()    os.Exit(code)}如果不是在包级别运行,一般来说这很好。目前这并没有给我太多控制权,因为我想为每个测试文件运行其中一个。(至少这是我注意到的,如果我对此有误,请告诉我)目前我正在做的基本上是为每个测试运行初始化,但这确实是很多重复的代码:address, tearDownTestCase := testutils.SetupTestCase(emptyContext, postRouter(login.LoginUser), "/login")defer tearDownTestCase()// init test use case data// run test// clean use case data你认为有更好的方法吗?
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

Go 没有支持拆解方法的内置功能。但是,有多个第三方包可以实现这一点。其中,我最喜欢银杏包。它非常有表现力并且避免了代码重复。

样本测试看起来像

var _ = Describe("Book", func() {

    var (

        longBook  Book

        shortBook Book

    )


    BeforeEach(func() {

        longBook = Book{

            Title:  "Les Miserables",

            Author: "Victor Hugo",

            Pages:  1488,

        }


        shortBook = Book{

            Title:  "Fox In Socks",

            Author: "Dr. Seuss",

            Pages:  24,

        }

    })


    Describe("Categorizing book length", func() {

        Context("With more than 300 pages", func() {

            It("should be a novel", func() {

                Expect(longBook.CategoryByLength()).To(Equal("NOVEL"))

            })

        })


        Context("With fewer than 300 pages", func() {

            It("should be a short story", func() {

                Expect(shortBook.CategoryByLength()).To(Equal("SHORT STORY"))

            })

        })

    })

})

相似之处还有其他生命周期方法afterEach,如justBeforeEach等。


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信