Ich versuche, Testmethoden zu testen, die den Typ *gorm.DB
verwenden, und bin neugierig, wie man eine Schnittstelle richtig definiert, die es mir ermöglicht, zu testen, ohne eine db zu treffen.Wie definiere ich richtig eine gorm db interface?
Hier ist ein kleines Beispiel dafür, was ich tun möchte:
type DBProxy interface {
Create(values interface{}) *DBProxy
Update(values interface{}) *DBProxy
}
type TestDB struct{}
func (t *TestDB) Create(values interface{}) *TestDB {
return t
}
func (t *TestDB) Update(values interface{}) *TestDB {
return t
}
func Connect() DBProxy {
return &TestDB{}
}
was zur Folge hat:
cannot use TestDB literal (type *TestDB) as type DBProxy in return argument:
*TestDB does not implement DBProxy (wrong type for Create method)
have Create(interface {}) *TestDB
want Create(interface {}) *DBProxy
Jede mögliche Hilfe würde geschätzt!
UPDATE
Hier ist meine eigentliche Anwendungscode:
package database
import (
"log"
"os"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
)
type DBProxy interface {
Create(values interface{}) DBProxy
Update(values interface{}) DBProxy
}
func Connect() DBProxy {
databaseUrl := os.Getenv("DATABASE_URL")
db, err := gorm.Open("postgres", databaseUrl)
if err != nil {
log.Fatal(err)
}
return db
}
was zur Folge hat:
cannot use db (type *gorm.DB) as type DBProxy in return argument:
*gorm.DB does not implement DBProxy (wrong type for Create method)
have Create(interface {}) *gorm.DB
want Create(interface {}) DBProxy
Vielen Dank für die Antwort behaupten. Ich bin immer noch ein wenig verwirrt. Mein Ziel ist es, eine Schnittstelle für 'gorm.DB' zu erstellen, um einen Mock in einem Komponententest zu verwenden. Da ich nicht kontrollieren kann, was 'gorm.DB' Methoden zurückgeben, bin ich unsicher, wie man die Schnittstelle richtig definiert. – astephenb