109
社区成员




这个作业属于哪个课程 | https://bbs.csdn.net/forums/2401_CS_SE_FZU |
---|---|
这个作业要求在哪里 | https://bbs.csdn.net/topics/619470310 |
这个作业的目标 | 个人技术总结 |
其他参考文献 | 无 |
单元测试是测试代码中最小的功能单元的过程。软件测试有助于确保代码质量,是软件开发过程中不可或缺的一部分。软件开发的最佳实践是将软件编写为小型功能单元,然后为每个代码单元编写单元测试。您可以先将单元测试编写为代码。然后,在每次更改软件代码时自动运行该测试代码。这样,如果测试失败,您就能快速隔离出存在漏洞或错误的代码区域。单元测试可以强化模块化思维范式,并提高测试的覆盖率和质量。自动单元测试有助于确保您或您的开发人员有更多时间专注于编码。
单元测试有一些广泛接受的准则和最佳实践,目的是确保测试代码具有可读性、可维护性、稳定性,并且能够准确反映被测试的功能。以下是常见的单元测试准则,以及如何在我实践中实现它们。
func TestGetFileUrl(t *testing.T) {
const basePath = "http://test-url"
const filepath = "/filepath"
type testCase struct {
name string
expectedResult interface{}
}
expectedResult := basePath + utils.UriEncode(filePath) + "?id=newUrl"
testCases := []testCase{
{
name: "GetFileSuccessfully",
expectedResult: expectedResult,
},
}
req := &like.GetPopularRank{Filepath: filePath}
defer mockey.UnPatchAll()
for _, tc := range testCases {
mockey.PatchConvey(tc.name, t, func() {
mockOSSClient := new(oss.Client)
fileService := NewFileService(context.Background(), mockOSSClient)
mockey.Mock(oss.GetDownloadUrl).To(func(uri string) (string, error) {
return expectedResult, nil
}).Build()
result, err := fileService.GetFileUrl(req)
assert.Nil(t, err)
assert.Equal(t, tc.expectedResult, result)
})
}
}
对于handler的测试:
发送请求
func PerformRequest(engine *route.Engine, method, url string, body *Body, headers ...Header) *ResponseRecorder
Hertz提供了此函数用来在没有网络传输的情况下向指定 engine 发送构造好的请求。
接收响应
resp := ut.PerformRequest(router, consts.MethodGet, tc.Url, nil)
assert.Equal(t, http.StatusOK, resp.Code)
assert.Equal(t, tc.ExpectedResult, string(resp.Result().Body()))
对测试结果的断言,主要在状态码和响应体(其他如有需要也可以加上ContentType)上
通过单元测试的学习实践,我意识到单元测试能够帮助我们在早期发现代码中的问题,避免在后期进行大规模的调试。这种“防患于未然”的理念让我在编写代码时更加谨慎,也更加注重代码的健壮性。在实践中,我也遇到了一些挑战。例如,如何确保测试的独立性和可重复性,如何处理测试与实际环境之间的差异等。未来,我计划将这些知识应用到更多的项目中,不仅在单元测试方面,还要结合集成测试和系统测试,制定全面的测试策略。我相信,通过持续的学习和实践,我能够在软件开发中更加游刃有余,编写出更高质量的代码
https://www.cloudwego.io/zh/docs/hertz/tutorials/basic-feature/unit-test/
https://gin-gonic.com/zh-cn/docs/testing/