Вы предотвращаете это, не разделяя переменную color
между тестовыми примерами - каждый из ваших тестовых примеров получает новый Tyre
, но оба они указывают на одну и ту же память, хранящую значение цвета. Итак, когда вы меняете tyre.Color
в отрицательном тестовом примере, вы обновляете значение переменной color
, а другой тестовый пример tyre.Color
также указывает на эту переменную.
Простое решение будет иметь функцию makeTyre()
, которая получает совершенно новую шину с собственной памятью для хранения цвета и получения шины для каждого теста:
package main
import (
"testing"
)
type Tyre struct {
Color *string
}
type Vehicle struct {
Tyre Tyre
}
func makeTyre() Tyre {
color := "black"
return Tyre{Color: &color}
}
func TestTyre(t *testing.T) {
expectedTyreColor := "black"
t.Run("negativeTest", func(t *testing.T) {
tyre := makeTyre()
*tyre.Color = "blue"
vehicle := Vehicle{Tyre: tyre}
actualTyreColor := vehicle.Tyre.Color
ok := (expectedTyreColor == *actualTyreColor)
if ok {
t.Error("Color should be blue")
}
})
t.Run("positiveTest", func(t *testing.T) {
tyre := makeTyre()
vehicle := Vehicle{Tyre: tyre}
actualTyreColor := vehicle.Tyre.Color
ok := (expectedTyreColor == *actualTyreColor)
if !ok {
t.Error("Color should be black, instead of", *actualTyreColor)
}
})
}