如何编写与数据库无关的函数,使其更易于进行单元测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写与数据库无关的函数,使其更易于进行单元测试相关的知识,希望对你有一定的参考价值。

TLDR:对使用数据库作为数据源但该数据源不必是数据库的功能进行单元测试的最佳方法是什么(也就是说,该函数不知道数据在哪里)来自(例如,它可以是一个对象等)?

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=

我正在尝试找出使用数据库作为其数据源(通过其参数传递)但单元不必是数据库(例如,它可以是数据库)的单元测试功能的最佳实践是什么。对象等)。我添加该子句“数据源不必是数据库”的原因是因为我不想在单元测试期间使用数据库。因此,我该如何编写与数据库无关的函数?

一种可能的方法是提供一个保存数据源的“ env”参数,如下所示:

type Env struct 
    DataSource  interface


func FunctionToTest(env Env) 
    switch et := (env.DataSource).(type) 
    case UserDatasource:
        userSource := (env.DataSource).(UserDatasource)
        user := userSource.getUser()
    default:
        // Throw error
    


func FunctionToTest2(env Env) 
    switch et := (env.DataSource).(type) 
    case CredentialsDatasource:
        credentialSource := (env.DataSource).(CredentialsDatasource)
        password := credentialSource.getPassword()
    default:
        // Throw error
    

与此有关的问题是,它似乎“很笨拙”,并且似乎存在更好的解决方案。我想学习如何执行此操作的原因是可以编写模拟数据库的单元测试。

我非常感谢您提供的所有信息。

提前感谢!

答案

您想在这里使用界面。用来提取数据来源的常见模式是存储库模式。 Here是一篇文章,您可以在其中阅读有关存储库模式和用于开发编写良好的Go应用程序的其他技巧。

以上是关于如何编写与数据库无关的函数,使其更易于进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

如何对字典的函数输出列表进行单元测试?

如何在haskell中对两个参数进行模式匹配

ColdFusion 单元测试框架

如何对非导出函数进行单元测试?

基本名词介绍

我应该如何改进线程池以使其更安全?