###前提・実現したいこと
Golangである基本的なメソッドの単体テストを実装しようとしています。
###発生している問題・エラーメッセージ
しかし、データ型をどのように解決すればよいのかがわかりません。
下に示したのはAppのクラスの中で、Appのフィールドの一つにDaoを入れています。そして、Appのメソッド(A)の中ででDaoのメソッド(D)を呼び出しています。そのAppのメソッド(A)の単体テストがしたいです。しかし、そのAppのメソッド(A)の中で呼び出しているDaoのメソッド(D)のテストは不要ですので、そのDaoのメソッド(D)をtestではダミーのメソッドにしたいです。
###該当のソースコード
package main import ( "fmt" ) // Dao type Dao struct{} func (this *Dao) D() { fmt.Println("D") } // App type App struct { dao *Dao } func (this *App) SetDao(dao *Dao) { this.dao = dao } func (this *App) A() { this.dao.D() } func main() { app := &App{dao: &Dao{}} app.A() // D が返ってくるが、別の戻り値にしたい }
###試したこと
インターフェイスでの実装しました。ですが、Daoのメソッドはたくさんあるので、一つの単体テストのたびに、Daoのmethod全てを実装したDummyクラスを作る必要が生まれてしまうのでダメでした。
package main import ( "fmt" ) // Dao type Dao struct{} func (this *Dao) D() { fmt.Println("D") } // App type App struct { // dao *Dao dao Der } func (this *App) SetDao(dao *Dao) { this.dao = dao } func (this *App) A() { this.dao.D() } // D&Dummy Interface type Der interface { D() } // dummy type Dummy struct{} func (this *Dummy) D() { fmt.Println("Dummy") } func main() { app := &App{dao: &Dao{}} app.A() // D app2 := &App{dao: &Dummy{}} app2.A() // Dummy }
本当はJavaScriptの用に、あるクラスのメソッドをインスタン後に無名関数などでreplaceできれば簡単にdummyメソッドを追加できるのですが、Golangでは何かいい方法はないでしょうか?
###補足情報(言語/FW/ツール等のバージョンなど)
golang 1.6
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。