Pregunta

Me sobrecargado el operador de desplazamiento a la izquierda en mi clase y la salida funciona bien, así que por ejemplo cuando tengo una línea que dice tribunal << obj; Lo haré de salida de los campos separados por una coma.

 ostream& operator<<(ostream& output, const MyClass& obj)
 {
     output << obj.field1 << ", " << obj.field2;
     return output;
 }

Quiero escribir un caso de prueba para esta operación, pero no tengo ni idea de cómo comparar el resultado obtenido con el resultado esperado en CxxTest. He intentado lo siguiente, pero no funcionó:

 TS_ASSERT_EQUALS(cout << "1, 50.0", cout << obj);

¿Se supone utilizar una operación CxxTest diferente o cambiar el parámetro mecanismo de paso en TS_ASSERT_EQUALS?

Tenga en cuenta que cuando la salida de las siguientes líneas, que consiguen los mismos resultados:

 cout << obj;
 cout << "1, 50.0";

Nota: Tengo un montón de errores de compilación cuando intento compilar el programa porque TS_ASSERT_EQUALS falla.

¿Fue útil?

Solución

Incluso si lo hiciera de compilación, que está básicamente comparando cout consigo mismo ...

Trate de escribir con dos std::stringstreams distintas, la extracción de sus valores de cadena, y la comparación de éstos.

Si también necesita banderas ostream de prueba, definir una función de comparación y uso TS_ASSERT_RELATION.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top