Допустим есть у меня некая библиотека
package v1
var balance int
//Deposit ...
func Deposit(amount int) {
balance = balance + amount
}
//Balance ...
func Balance() int {
return balance
}
func setBalance(amount int) {
balance = amount
}
Здесь возможно состояние гонки, если вызвать функцию в разных горутинах.
Имеет ли право на жизнь такой тест кейс?
func TestRaceDeposit(t *testing.T) {
setBalance(0)
ch := make(chan struct{})
go func() {
Deposit(10)
ch <- struct{}{}
}()
Deposit(10)
<-ch
if Balance() != 20 {
t.Errorf("unexpected balance: value - %d expect 20", Balance())
}
}
Чтобы при запуске тестов с флагом -race иметь возможность отлавливать состояние гонки