コードをテストしやすくするために、具体的な型の代わりにインターフェイスを使用することに重点が置かれています。私はsql DBやRowsのようなパッケージではこれがなぜ行われなかったのだろうと思います。これらの依存関係を模擬するために私は独自のインターフェースを作成して、ユニットテスト(統合テストではない)を書くことができなければなりませんでした。 DBのコードはそのようにテストされていますか?GOのデータベースタイプがインタフェースでない理由
6
A
答えて
0
具体的な型の代わりに公開APIにインターフェイスを公開すると、インターフェイスにメソッドを追加するときに他の人のコードが破損する危険性が高まります。
たとえば、os.File
を参照してください。 os.File
がインタフェースであれば、17個のパブリックメソッドを持つインタフェースになります。 18番目のメソッドを追加すると、os.File
インターフェイスを実装した独自の型を定義したすべての人が壊れてしまいます。対照的に、現在のos.File
構造体に18番目のメソッドを追加しても、io.Reader
,io.Writer
またはos.File
のメソッドのサブセットを定義するその他のインタフェースを取るメソッドは破られません。また、io.Reader
とio.Writer
インターフェイスをモックするテストコードを破ることもありません。
他の人に独自の実装を定義させたい場合は、パブリックAPIにインタフェースを公開してください。それ以外の場合は、具体的な型を公開し、必要なメソッドのサブセットのみを使用して、具体的な型で実装された独自のインタフェースを定義できるようにします。
関連する問題
- 1. Go:インタフェースのオプションメソッド
- 2. Goに「goto」ステートメントがある理由
- 3. 環境インタフェース用コンフィグレーションBeanが不要な理由
- 4. Goインタフェースで重複したメソッドを処理する方法は?
- 5. Goでチャネルを持つインタフェースを定義
- 6. インタフェースについてGoとJavaの違いは何ですか?
- 7. インタフェースと抽象クラスの関数のJavaスコープが異なる理由
- 8. このbeanがnullでない理由
- 9. divが並んでいない理由
- 10. GPSアップデートがない理由
- 11. Goチャネルがバッファサイズを制限する理由
- 12. アプリアンドロイドスタジオで何の理由もない理由で背景が変わる2.2
- 13. SignalRが利用できない理由
- 14. xhtmlが有効でない理由
- 15. System.Drawing.Colorが列挙型でない理由
- 16. ViewModelLocatorメンバーが静的でない理由
- 17. フルスクリーンができない理由
- 18. URIが取得できない理由
- 19. ケラス:トレーニングが正確でない理由
- 20. Goでインタフェース変数がどのように実装されていますか?
- 21. NSMatrix、NSForm - addRow - 上記の理由とそうでない理由
- 22. return文が必要な理由を理解できない
- 23. 特別な理由がないFirefoxセキュリティメッセージ
- 24. SqlDataReader.ReadAsync()のインターフェイスがない理由
- 25. コードがないCSSブロックの理由は?
- 26. Goでのリストの理解
- 27. インタフェースでgeneric型を使用しているときにJAVAをコンパイルできない理由
- 28. 私のコードがうまくいかない理由を理解できない
- 29. str/intエラーを受け取り、理由を理解できない理由がわからない
- 30. GoでのHTTP経由のJSONRPC
誰でもどこのタイプのインタフェースもGoに作成できます。つまり、使用しないインタフェースを宣言する必要はありません。あなたが気付いたように、既存のインターフェースがなかったという事実が、あなたが望むものを作成するのを妨げていないということです。 –
確かに、私はそれを得る。しかし、私は他の人が具体的なタイプを模擬するのをより簡単にするために、インタフェースの使用を強調している多くのゴーファーに出くわします。たぶん私はこれを考えすぎているかもしれない。ありがとう。 –
@AmirKeibi:インターフェースは、モックをもっと簡単に、真実にするのですが、それはパッケージのメンテナーが完全なインターフェースベースのパッケージを作成することになっているわけではありません。 'database-sqlmock '(https://github.com/DATA-DOG/go-sqlmock)のように' database/sql'を簡単にモックできるパッケージがあります。 –