Ситуация такая, есть класс, в котором перегружены операторы сложения и равенства, нужно написать юнит-тесты к этому классу (например, c1 + c2 == c3
, где c1
, c2
, c3
- объекты класса). Вопрос: как это сделать?
Знаю, что в VS используют AreEqual
для таких целей, есть ли здесь что-то такое и как решить проблему? Использование REQUIRE
и REQUIRE_THAT
порождает ошибки.
Например: есть класс ComplexNum В нём перегружены операторы следующим образом:
ComplexNum ComplexNum::operator + (const ComplexNum &comp) {
ComplexNum temp;
temp.re = this->re + comp.re;
temp.im = this->im + comp.im;
return temp;
}
bool ComplexNum::operator == (const ComplexNum &comp) {
return this->re == comp.re && this->im == comp.im;
}
Мы имеем объекты
ComplexNum c1(2, 3);
ComplexNum c2(-8, 7);
ComplexNum c3(-6, 10);
И нужно протестировать на верность равенства, следующее выражение, например, вызовет ошибку. Как это сделать правильно?
REQUIRE((c1 + c2)== c3);
Проблема заключается в том, что Ваш operator==
неконстантный, что, в принципе, некорректно, но приемлемо. Тем не менее, Catch используется переданные аргументы как ссылки на константные объекты, в результате чего он требует от operator==
быть либо константным членом класса, либо свободной функцией для двух аргументов, оба которых являются ссылкой на константу.
В целом, Catch требует от Вас не совсем справедливо, т.к. не фреймворку решать, но это, на самом деле, правильно реализовывать оператор сравнения либо как константный, либо как свободную функцию (второе предпочтительно, хотя в данном случае и не принципиально). Т.е. минимальные изменения, чтобы заставить этот код работать будут такими:
bool ComplexNum::operator == (const ComplexNum &comp) const {
return this->re == comp.re && this->im == comp.im;
}
На будущее: приводите всю релеватную информацию в вопросе и не скриншотами. Код, текст ошибок — всё, что помогает людям понять Вашу проблему.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задача - выполнить последовательность команд в дочерней консоли Windows и записать их вывод в родительскую консольАлгоритм программы, если...
Я немного не понимаю данный код, а точнее кусок кода, связанный с массивом и циклом for
Необходимо вставить строку в другую строку, но после определенного символаБез использования String и других библиотек
Изучаю Qt, наткнулся на такую проблемуМне требуется быстро менять ui файлы по ходу выполнения программы