убить запущенный процесс в тесте golang

Написание программы на основе http.ListenAndServe и написание тестов я зашел в тупик. мой тест выглядит так

package main

import (
    "testing"
    "../"
)

func TestServer(t *testing.T) {
    Server.Server()
}

и проверенная функция

package Server

import (
    "net/http"
)

var (
    DefaultPort = "8080"
    DefaultDir = "."
)

func Server() {
    port := DefaultPort
    directory := DefaultPort

    http.ListenAndServe(":"+port, http.FileServer(http.Dir(directory)))
}

моя цель - запустить тест и после запуска прослушивателя сервера убить его и вернуть сообщение об успешном завершении


person Community    schedule 28.12.2014    source источник
comment
Попробуйте изменить тестовый пакет на package Server и удалить операторы импорта. Затем сделайте go run -test. Проще всего, если файл, содержащий тестовые функции (который должен называться, например, server_test.go), имеет то же объявление пакета, что и тестируемый пакет. Взгляните на golang.org/doc/code.html#Testing .   -  person Intermernet    schedule 28.12.2014


Ответы (1)


Вы не можете. Чтобы иметь возможность останавливаться, вам нужно создать Listener вручную

listener, err := net.Listen("http", ":"+port)
err=http.Serve(listener, http.FileServer(http.Dir(directory)))

тогда ты можешь

err=listener.Close()
person Uvelichitel    schedule 28.12.2014