9
votes

Méthode pratique dans GoogletTest pour une double comparaison de non égaux?

Je recherche quelque chose de similaire à l'assert_eq / assert_ne pour asser_double_eq.

Peut-être que je manque un moyen facile de le faire sans avoir une affirmation_double_ne?


0 commentaires

3 Réponses :


1
votes

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);   
}


0 commentaires

7
votes

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: xxx


0 commentaires

0
votes

Au lieu de créer une nouvelle aide de CMphelperfloatintingPointNeNe, vous pouvez simplement définir la macro comme l'inverse de l'aide existante: xxx

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.


0 commentaires