2016-04-23 8 views
3

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 

Antwort

1

TestDB Methoden müssen *DBProxy Rückkehr zu implementieren DBProxy

func (t *TestDB) Create(values interface{}) *DBProxy { 
    return t 
} 
func (t *TestDB) Update(values interface{}) *DBProxy { 
    return t 
} 

später müssen Sie CreatedDBProxy.(TestDB)

+0

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