データベースを任意に使用するNewDao
の機能をテストすることはできません。返されたDaoがnilクライアントもnilもないかどうかチェックしたい。エラーを返さないようにsqlmockをスタブするにはどうすればよいですか?
type Dao struct {
client ClientDao
product ProductDao
}
func (d *Dao) Client() ClientDao {
return d.client
}
func (d *Dao) Product() ProductDao {
return d.product
}
func NewDao(db *sql.DB) (*Dao, error) {
if db == nil {
return nil, errors.New("Can't create a dao from nil database")
}
client, err := newClientDao(db) // Uses db arbitrarily
if err != nil {
return nil, err
}
product, err := newProductDao(db) // Uses db arbitrarily
if err != nil {
return nil, err
}
return &Dao{client, product}, nil
}
Iのsqlmockを使用してテストNewDao()
が、私はモックニーズが期待するのかわからないので、それは常に失敗します。
func TestNewDao(t *testing.T) {
db, mock, err := sqlmock.New()
if err != nil {
t.Fatal("Can't create database for test dao")
}
// How to set mock to expect anything and never fail?
// mock.ExpectQuery(any) ?
dao, err := NewDao(db)
// err is never nil, because mock has no expectations
if err != nil {
t.Fatal("Can't create dao for test dao.User %q", err)
}
if dao.User() == nil {
t.Fatalf("User dao is nil")
}
if dao.Client() == nil {
t.Fatalf("Client dao is nil")
}
}
いずれかが私の目的を達成するためsqlmockをスタブする方法を知っていますか?または、sqlmock libの代替を指定できますか?あなたはNewDao
であなたの最後の見返りに2番目の項目が欠落している
ありがとうございました。私はただエラーを修正しました。 –
私が望むのは、任意のdbを使用するUserDaoの実装に依存しないテストを行う方法を見つけ出すことです。 –