Golang: отражение.deepEqual возвращает неожиданное false

#go #testing #tdd

#Вперед #тестирование #tdd

Вопрос:

У меня есть следующий код и кодовый тест ниже, и по какой-то причине deepEqual возвращает false и не проходит тест. Теперь, прочитав документ об этом, я ожидал бы, что это пройдет с истиной для чего-то настолько простого? Любые замечания будут высоко оценены. Спасибо

 // customer.go
type Customer struct {
    customerID int
    domains []string
    names []string
}
func NewCustomer(customerID int, domains []string, names []string) *Customer{
    return amp;Customer{
        customerID: customerID,
        domains: domains,
        names:names,
    }
}
  
 // customer_test.go
func TestNewCustomer(t *testing.T) {
    expected := amp;Customer{123,
        []string{},
        []string{},
    }

    got := NewCustomer(123, []string{}, []string{})

    if got.customerID != expected.customerID {
        t.Errorf("Got: %v, expected: %v", got.customerID, expected.customerID)
    }

    if reflect.DeepEqual(got, expected) {
        t.Errorf("Got: %v, expected: %v", got, expected)
    }
}

  

вывод:

 Got: amp;{123 [] []}, expected: amp;{123 [] []}
  

Ответ №1:

reflect.DeepEqual() возвращает true , как и ожидалось, вот почему t.Errorf() вызывается your .

Вы хотите, чтобы тест завершился неудачей, если они не равны. Вам просто нужно отменить условие:

 if !reflect.DeepEqual(got, expected) {
    t.Errorf("Got: %v, expected: %v", got, expected)
}