데이터베이스를 임의로 사용하는 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에 대한 대안을 지정할 수 있습니까?
의견을 보내 주셔서 감사합니다. 오류가 수정되었습니다. –
내가 원하는 것은 임의로 db를 사용하는 UserDao 구현에 의존하지 않고 테스트를 수행하는 방법을 찾는 것입니다. –