
为了提升代码质量,之前给组内定了一个 UT 覆盖率的 OKR ,但 golang 写 UT 时,生成测试数据很麻烦。
一方面每个 model 实例都要手动创建,另一方面由于 golang 的语言特性每个字段也要 set 。进而,自己写 factory 函数也很麻烦,内容上都是重复的劳动。
于是自己写了一个类似于 python 中 factory-boy 的数据生成函数的代码生成工具。用来生成 factory 函数文件。
还有更多的设置可以看该项目 Github 上的 README ,现在这个工具已经通过 makefile 成为公司项目中的一个工具包。
欢迎大家使用,并提意见
补充一下生成factory文件和用法
package booktableorderfactory import ( "github.com/bxcodec/faker" "github/zaihui/ent-factory/factories" "github/zaihui/ent-factory/gen/entschema" "github/zaihui/ent-factory/service/app" ) type BookTableOrderFieldSetter func(*entschema.BookTableOrder) func SetUID(uIDGen string) BookTableOrderFieldSetter { return func(bookTableOrderGen *entschema.BookTableOrder) { bookTableOrderGen.UID = uIDGen } } func SetUserUID(userUIDGen string) BookTableOrderFieldSetter { return func(bookTableOrderGen *entschema.BookTableOrder) { bookTableOrderGen.UserUID = userUIDGen } } func SetOrderNo(orderNoGen string) BookTableOrderFieldSetter { return func(bookTableOrderGen *entschema.BookTableOrder) { bookTableOrderGen.OrderNo = orderNoGen } } func SetType(typeGen string) BookTableOrderFieldSetter { return func(bookTableOrderGen *entschema.BookTableOrder) { bookTableOrderGen.Type = typeGen } } func New(s factories.TestSuite, opts ...BookTableOrderFieldSetter) *entschema.BookTableOrder { data := entschema.BookTableOrder{} s.NoError(faker.FakeData(&data)) for _, opt := range opts { opt(&data) } return app.EntClient.BookTableOrder.Create(). SetUID(data.UID). SetUserUID(data.UserUID). SetOrderNo(data.OrderNo). SetType(data.Type). SaveX(s.Context()) } 用法
package main import ( your_location_of_factories/booktableorderfactory ) // s is an instance of test suite order := booktableorderfactory.new(s) // if you want to customize the value of a field, eg. UID order2: = booktableorderfactory.new(s, booktableorderfactory.SetUID("your uid")) 1 kindjeff 2023 年 2 月 7 日 wow ,正好需要这种东西(点开发现已 star 但没看过,难崩)。 ent 的 code generation 确实是个麻烦事。 |
2 adjusted 2023 年 2 月 7 日 看着像用了 ent 源码改的,而不是作为 ent 的插件? |