2015-11-29 8 views
0

У меня есть API для отдыха, реализованный с использованием Gorilla Mux в Голанге. Этот API загружает/загружает файлы из MongoDb GridFs. Я хочу написать интеграционные тесты для моего API.
Есть ли пакет embedded MongoDb с GridFs support в Go? Как мы тестируем API с помощью GridF? Нужно ли нам проверять реальный MongoDB?
Java, кажется, есть такая libraryGolang MongoDb GridFs Тестирование

В рамках теста, я хотел бы начать встроенный MongoDB и остановить его в конце теста.

ответ

2

Нет встроенного MongoDB для Go, насколько я знаю.

Что я делаю, чтобы использовать собственный gopkg.in/mgo.v2/dbtest, которые вы можете установить, как обычно, с

go get -u "gopkg.in/mgo.v2/dbtest" 

Хотя это требует mongod внутри вашей $ PATH, то DBTEST заботится ГГО о всех остальных.

Вы получаете сервер с

package StackOverflowTests 

import (
    "io/ioutil" 
    "os" 
    "testing" 

    "gopkg.in/mgo.v2/dbtest" 
) 

func TestFoo(t *testing.T) { 

    d, _ := ioutil.TempDir(os.TempDir(), "mongotools-test") 

    server := dbtest.DBServer{} 
    server.SetPath(d) 

    // Note that the server will be started automagically 
    session := server.Session() 

    // Insert data programmatically as needed 
    setupDatabaseAndCollections(session) 

    // Do your testing stuff 
    foo.Bar(session) 
    // Whatever tests you do 

    // We can not use "defer session.Close()" because... 
    session.Close() 

    // ... "server.Wipe()" will panic if there are still connections open 
    // for example because you did a .Copy() on the 
    // original session in your code. VERY useful! 
    server.Wipe() 

    // Tear down the server 
    server.Stop() 
} 

Обратите внимание, что вы ни должны определить IP-адрес или порт, в котором предусмотрены автомагически (бесплатный открытый порт в незарезервированный диапазоне локального хоста используется).

+0

Кажется, что проблема связана с импортом 'gopkg.in/mgo.v2/dbtest'. Когда мы запускаем тесты, это происходит с ошибкой 'gopkg.in/tomb.v2: нет встроенных исходных файлов Go в ошибке. Мне пришлось запустить 'go get gopkg.in/tomb.v2', чтобы решить эту проблему. –