Consideriamo questo semplice codice di test.Come risolvere i numeri di riga nell'output di test Go?
(Nota:. assertSomething
è super semplice qui, ma di solito mi piacerebbe scrivere un aiuto più specializzato per il compito a portata di mano che guardare le cose più e potrebbe segnalare più di un tipo di errore)
package hello
import "testing"
func TestFoo(t *testing.T) {
assertSomething(t, 2+2 == 4) // line 6
assertSomething(t, 2+3 == 6) // line 7
}
func assertSomething(t *testing.T, expected bool) {
if !expected {
t.Error("Something's not right") // line 12
}
}
Quando eseguo go test
, ricevo il seguente:
--- FAIL: TestFoo (0.00s)
hello.go:12: Something's not right
FAIL
exit status 1
FAIL kos/hello 0.008s
ho due domande:
1) L'errore punta alla riga 12 - perché? In che modo t.Error
individua da quale riga è stato chiamato?
2) l'aiutante, vorrei precisare che t.Error
dovrebbe guardare livello di strato superiore per determinare il numero di riga da stampare, in modo che avrei ricevuto un messaggio come questo:
--- FAIL: TestFoo (0.00s)
hello.go:7: Something's not right
Python permette per fare questo, ad esempio, in warnings.warn("message", stacklevel=2)
- come implementerei l'equivalente qui?
Per quanto concerne 1, è probabile che utilizza [runtime.Caller] (http://godoc.org/runtime#Caller) per questo scopo. Fornisci un numero diverso per "salta" per salire di alcuni livelli. Non sono sicuro che tu possa dire a 'test.XXX' di farlo senza modificare il codice del pacchetto di test. – jimt