TLDR:データベースをデータソースとして使用するが、データソースがデータベースである必要がない(つまり、データがどこに来るのかを認識していない)関数をユニットテストする最良の方法は何ですか?それはオブジェクトなどである可能性があります)?GoLangにデータベース非依存関数を書き込んで単体テストを容易にする方法は?
= - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - === = = = = = = =
データベースをデータソースとして使用する単体テスト機能のベストプラクティスを見つけようとしています。パラメタ - しかし、データソースはデータベースである必要はありません(例えば、オブジェクトなど)。データソースがデータベースである必要はないという句を追加する理由は、単体テスト中にデータベースを使用したくないからです。では、データベースに依存しない関数を作成するにはどうすればよいですか?
1つの可能なアプローチは、そう(GoLang)のようなデータソースを保持している「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
}
}
これで問題は、それが「ハック」ようで、そこに存在するようにそれは感じているということですよりよい解決策です。私がこれを行う方法を学びたい理由は、データベースを模擬する単体テストを書くことができるようにするためです。
私はすべての入力を感謝します。
ありがとうございます!
をテストするための
。つまり、引数を持たず、ユーザーや資格情報など、必要なリソースタイプを返す関数です。 –