В первом случае
Код: Выделить всё
struct S s1, s2;
ASSERT_EQ(s1, s2);
Практически, ничто не помешает реализации ASSERT_EQ выполнять проверку идентичности своих аргументов, так что ASSERT_EQ(s1, s1) решительно проходит, наблюдая, что адресоф(s1) == адрес(s1) и никогда не достигает оператора==() для пользовательского типа.
Другая проблема заключается в том, что ASSERT_NE может использовать оператор!=() или может использовать оператор ==() и отрицать результат.
Более сложная проблема заключается в том, что утверждения GoogleTest выполняют поиск в другой области, что приводит к различиям поиска.
С другой стороны, я вижу других, которые используют ASSERT_EQ для тестирования операторов.
Лучше ли для тестов пользовательских операторов равенства скрывать оператор в вызовах ASSERT_EQ и ASSERT_NE или явно использовать тестируемый оператор в модульном тесте, отделяя использование оператора от этапа утверждения?
Ваша рекомендация такая же для сравнения операторы , = как для равенства !=, ==?
Подробнее здесь: https://stackoverflow.com/questions/798 ... comparison
Мобильная версия