Open
Description
What version of Go are you using (go version
)?
$ go version go version go1.15.1 darwin/amd64
Does this issue reproduce with the latest release?
yes
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/Users/home/Library/Caches/go-build" GOENV="/Users/home/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOINSECURE="" GOMODCACHE="/Users/home/go/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/home/go" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="/Users/home/mystuff/kama/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/gc/sfs6hvtd1r392kn91n3jp17m0000gn/T/go-build416873732=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
Created test example (https://golang.org/pkg/testing/#hdr-Examples, https://blog.golang.org/examples).
A reproducer of the issue is at https://play.golang.org/p/969hijP9sMx
What did you expect to see?
That example test is failing because there is a mismatch between what is been output to stdOut and what the test runner expects the output to be.
Unfortunately for test examples(unlike normal tests), I'm not able to programmatically get the test output so that I can examine(via diffing or otherwise) it and compare it to the expected result.
What did you see instead?
I do not have a way to access(programmatically) the output of the test.
Metadata
Metadata
Assignees
Type
Projects
Status
Accepted
Milestone
Relationships
Development
No branches or pull requests
Activity
komuw commentedon Oct 14, 2020
The only way I was able to achieve what I want is via the following bad hack;
dmitshur commentedon Oct 15, 2020
Have you considered the
-json
flag ofgo test
? For example:komuw commentedon Oct 15, 2020
I guess that would work somehow. But I would have to run
go test
using another program that parses that output and compares thegot
andwanted
parts of the output.Add example test (#13)
bcmills commentedon Oct 15, 2020
As another alternative, you could use
os/exec
to runos.Args[0]
as a subprocess, to either run the generatedExampleHello
test or invoke the originalExampleHello
function directly. (See https://play.golang.org/p/T4fDo8D5M0H, but note that it doesn't work in the Playground due to #41339.)You could either extract the
want:
output by parsing the output of the subprocess, or usego/doc.Examples
to extract it programmatically.bcmills commentedon Oct 15, 2020
Come to think of it, it would be pretty straightforward to encapsulate the approach from the above comment as an external library. The API could look something like:
rsc commentedon Oct 21, 2020
There is a trap here, namely adding infinite new API to package testing as individual needs come up.
We need testing to do a limited amount of things. It's already getting hard to remember everything.
Looking at https://play.golang.org/p/969hijP9sMx, the issue I see is not that testing needs new API but instead that the example test output needs to do a better job highlighting the differences, such as by showing a diff. Maybe we should do that instead?
komuw commentedon Oct 22, 2020
That would be excellent.
[-]proposal: testing: Provide ability to inspect output of Example tests[/-][+]proposal: testing: show diffs for incorrect output from Example tests[/+]rsc commentedon Oct 28, 2020
Retitled for the suggestion I made last week, namely show diffs.
Does anyone object to that?
9 remaining items
gopherbot commentedon Mar 14, 2021
Change https://golang.org/cl/301589 mentions this issue:
testing: add diffing to clearly discern Example test failure output
mvdan commentedon Feb 18, 2022
I've just filed #51254, which is a pretty similar proposal, FYI :)
mgprot commentedon Jan 26, 2025
This was accepted 4 years ago... but is still not in production? (I'm at go v1.22.1)
As an interim alternative for anyone else reading this looking for help, I just published a
gotestdiff
filter to help find individual differences between thegot:
andwant:
blocks of failingExample
functions.e.g.
For those who are interested:
or see the source