Je recherche quelque chose de similaire à l'assert_eq / assert_ne pour asser_double_eq. p>
Peut-être que je manque un moyen facile de le faire sans avoir une affirmation_double_ne? P>
3 Réponses :
On dirait que tu n'as pas de chance. Cependant, vous pouvez en ajouter un vous-même. J'ai construit le code suivant avec asser_double_eq et assert_ne en tant que motif.
#define ASSERT_DOUBLE_NE(expected, actual)\ ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointNE<double>, \ expected, actual) // Helper template function for comparing floating-points. // // Template parameter: // // RawType: the raw floating-point type (either float or double) // // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM. template <typename RawType> AssertionResult CmpHelperFloatingPointNE(const char* expected_expression, const char* actual_expression, RawType expected, RawType actual) { const FloatingPoint<RawType> lhs(expected), rhs(actual); if ( ! lhs.AlmostEquals(rhs)) { return AssertionSuccess(); } StrStream expected_ss; expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) << expected; StrStream actual_ss; actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2) << actual; Message msg; msg << "Expected: (" << expected_expression << ") != (" << actual_expression << "), actual: (" << StrStreamToString(expected_ss) << ") == (" << StrStreamToString(actual_ss) << ")"; return AssertionFailure(msg); }
Vous pouvez utiliser le cadre de la moqueur de compagnon Google Mock. Il dispose d'une puissant bibliothèque de matchers (A la Hamcrest), que vous pouvez utiliser avec l'attente_that / assert_that Macros:
Au lieu de créer une nouvelle aide de CMphelperfloatintingPointNeNe, vous pouvez simplement définir la macro comme l'inverse de l'aide existante: Ce n'est pas aussi gracieux que la solution de Deft_code, car lorsque l'affirmation échoue, Il n'y a pas de détails spécifiques tels que "valeur attendue" et "valeur réelle", juste le numéro de ligne et le fichier de l'assertion. Pour mes besoins, cependant, le numéro de ligne était suffisant. P> p>