我想写很好我已经创建的REST API的单元测试。我有这样的简单结构:GO单元测试结构化REST API项目
ROOT/
config/
handlers/
lib/
models/
router/
main.go
config
包含JSON配置和一个简单的config.go
读取和解析JSON文件,填补了Config
结构。 handlers
包含控制器(即,在router/routes.go
中描述的相应METHOD + URL的处理程序)。 lib
包含一些数据库,请求响应器和记录器逻辑。 models
包含要从JSON和DB映射的结构和它们的funcs。最后router
包含路由器和路由定义。
现在我在GO中搜索和阅读了很多关于单元测试REST API的文章,并且发现了或多或少令人满意的关于如何设置测试服务器,定义路由和测试请求的文章。一切都好。 但只有当你想测试一个文件!
我现在的问题是如何为所有处理程序设置测试环境(服务器,路线,数据库连接)?发现here(我发现很容易理解和实现)的方法我有一个问题:或者我必须为每个处理程序分别运行测试或我必须在一个测试文件中为所有处理程序编写测试套件 。我相信你明白,这两种情况都不是很高兴(第一,因为我需要保持运行go test
运行所有测试成功和第二,因为有一个测试文件覆盖所有处理函数将变得无法维护)。
现在我成功了(根据the linked article),只是我把所有的测试和初始化代码放入一个func文件中,但我不喜欢这种方法。
我想达成什么是那种setUp()
或init()
与第一触发测试运行一次完成所有必需的变量全局可见,初始化,所有接下来的测试可能已经再次同时确保使用它们,而不需要实例化他们的这个设置文件仅编译测试...
我不确定这是否完全清楚,或者如果这种问题需要一些代码示例(除了什么是already linked in the article,但我会添加任何你认为是必需的,只是告诉我!
为什么不可能在init函数中为您的测试执行所有设置? – Machiel
@Machiel如果我有一个init函数来设置一切,我需要为一个测试文件定义全局变量。这意味着我无法在另一个测试文件中定义相同的变量。我想确保我能够单独运行每个测试并同时运行它们...... – shadyyx
“测试文件”是什么意思?我知道你有a_test.go b_test.go,但这不应该是个问题吧?如果你运行一个测试,它将所有东西都设置为一次测试,否则它会将所有设置设置为多次测试? – Machiel