2014-05-16 2 views
2

이 질문에 대한 답변입니다 Go 언어 테스트. 아마도 주류 언어의 대부분은 고유 한 xUnit 프레임 워크를 가지고 있습니다. 이러한 프레임 워크의 대부분은 테스트 실행 이벤트 (예 : 테스트 케이스 시작, 테스트 케이스 완료, 테스트 실패 등)를 수신하는 기능을 가지고 있습니다. 이것은 종종 테스트 이벤트 리스너라고하며 주로 프레임 워크 용 타사 확장을 작성할 때 사용됩니다.lang 테스트 이벤트 리스너로 이동 하시겠습니까?

내 질문 : 표준 Go 언어 테스트 프레임 워크 이벤트 (http://golang.org/pkg/testing/)에 연결하는 비슷한 방법이 있습니까?

답변

1

기본적으로 제공되는 것은 아니지만 스스로 조정할 수 없습니다. init이라는 함수는 다른 어떤 것보다 먼저 실행되도록 보장되어 있으며 테스트에서도 마찬가지입니다. 당신은, 물론,이를 만들기 위해 Fatal 주위에 래퍼 함수를 ​​만들고,이 그러나 당신이 채널을 사용하여 (원하는 확장 할 수 있습니다

func TestXxx(t *testing.T) { 
    listener.Dispatch(pkg.MakeEvent("TestXxx", pkg.TestStarted)) 

    err := DoSomething() 
    if err != nil { 
     listener.Dispatch(pkg.MakeEvent("TestXxx", pkg.TestFailed)) 
     t.Fatal("Test failed") 
    } 

    listener.Dispatch(pkg.MakeEvent("TestXxx", pkg.TestPassed)) 
} 

모든 테스트에서 그런

var listener pkg.EventListener 
func init() { 
    pkg.SetupMyFramework() 
    listener = pkg.Listener() 
} 

: 테스트 파일에서

덜 자세한 내용 등),하지만 그것이 통합 할 수있는 방법의 요지입니다.


편집 : 나는 *testing.T를 통해 정말 간단 래퍼를 작성하고 여기에 이벤트 파견 프레임 워크 : https://github.com/Jragonmiris/testevents

그것은 완전히 검증되지 않은의는 (ㅎ)하지만, 당신이 원하는 것을 상대적으로 가까워 야합니다. 디스패치 코드를 연결하기 위해 테스트 당 하나 또는 두 개의 추가 메서드 호출 만 필요합니다.

+0

테스트 논리에 많은 사본 붙여 넣기를 만들지 않겠습니까? JUnit RunListener http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html과 같은 단일 진입 점을 찾고 있습니다. –

+1

@ vania-pooh 당신은 간단한 해결책을 얻지 못할 것입니다. 왜냐하면 그런 일이 단순히'go test' 프레임 워크에 통합되지 않았기 때문입니다. 어떤 해결책이라도 너 자신에 약간의 갈고리가 필요합니다. – LinearZoetrope

+0

문제는 없지만 테스트 보고서를 구현하는 가장 중요한 이유는이 보고서를 사용하려면 누구나 자신의 테스트에서 최소한의 변경 사항을 만들어야한다는 것입니다. –

1

나는 그렇지 않습니다. 이 기능을 필요로하기 위해 성취하려는 것을 알면 도움이 될 것입니다.

+0

«프레임 워크 용 타사 확장 프로그램을 작성할 때 주로 사용됩니다.»? 누군가 스테로이드를 사용하여 이동을위한 단위 테스트 패키지를 작성하려고한다면 이것은 대답하기 쉬운 질문 일 것입니다. 반면에 이러한 프레임 워크를 작성하면 테스트 케이스의 수명주기를 완전히 제어 할 수 있습니다. – kostix

+0

Google은 테스트 보고서를 작성 중이며 Go 용 어댑터를 수집하는 데이터를 처음으로 구현했습니다. 주요 아이디어는 다음과 같은 이벤트를 수집 할 수있는 것입니다 : 테스트 스위트 시작, 테스트 케이스 메소드 시작, 테스트 스위트 완료 등. –

0

go1.10이 곧 출시 될 예정이며 하나의 새로운 기능은 go test -json (출시 노트 https://tip.golang.org/doc/go1.10#test)입니다.

go test -json을 사용하면 테스트 출력을 구문 분석하여 타사 프레임 워크로 보낼 수 있습니다.

관련 문제