Проверка Boost.Test, если структуры равны - PullRequest
0 голосов
/ 02 ноября 2019

Я новичок в Boost.Test в Visual Studio 2017.

Я пытаюсь протестировать метод с помощью следующего теста:

#define BOOST_TEST_MODULE astroTimeTests
#include <boost/test/included/unit_test.hpp>
#include <ctime>
#include "../../AstroTime/Convert.h"

struct TestFixture
{
    Convert convert_instance;

    TestFixture()
        : convert_instance()
    {}

    ~TestFixture() = default;
};

BOOST_FIXTURE_TEST_SUITE(TestConvert, TestFixture)

BOOST_AUTO_TEST_CASE(julianToGreenWichCase)
{
    // http://www.onlineconversion.com/julian_date.htm
    tm day1 = { 12, 28, 16, 2, 10, 119, 0, 0, 0};
    BOOST_REQUIRE_EQUAL(day1, convert_instance.JulianToGreenWich(2458790.18625f));
}

BOOST_AUTO_TEST_SUITE_END()

JulianToGreenWich возвращает tm struct from ctime.

Но я делаю что-то не так, потому что я получаю следующие ошибки:

Ошибка C2678 бинарная '==': оператор не найден, которыйпринимает левый операнд типа 'const Left' (или нет приемлемого преобразования)

Ошибка C2338 Тип должен реализовывать оператор << для печати </p>

Ошибка C2679 бинарная '<<': не найден оператор, который принимает правый операнд типа' const T '(или нет приемлемого преобразования) </p>

Как я могу проверить оба значения, day1 и результатJulianToGreenWich равны?

1 Ответ

0 голосов
/ 03 ноября 2019

Вот как я исправил эту ошибку:

#define BOOST_TEST_MODULE astroTimeTests
#include <boost/test/included/unit_test.hpp>
#include <ctime>
#include <iostream>

#include "../../AstroTime/Convert.h"

struct TestFixture
{
    Convert convert_instance;

    TestFixture()
        : convert_instance()
    {}

    ~TestFixture() = default;
};

bool operator ==(tm const &left, tm const &right)
{
    return(
           left.tm_sec == right.tm_sec
        && left.tm_min == right.tm_min
        && left.tm_hour == right.tm_hour
        && left.tm_mday == right.tm_mday
        && left.tm_mon == right.tm_mon
        && left.tm_year == right.tm_year);
}

std::ostream& operator<<(std::ostream& os, const tm& dt)
{
    os << dt.tm_hour << " " << dt.tm_min << " " << dt.tm_sec << ", "
       << dt.tm_mday << " " << dt.tm_mon << " " << (1900 + dt.tm_year) << std::endl;

    return os;
}

BOOST_FIXTURE_TEST_SUITE(TestConvert, TestFixture)

BOOST_AUTO_TEST_CASE(julianToGreenWichCase)
{
    // http://www.onlineconversion.com/julian_date.htm
    tm day1 = { 12, 28, 16, 2, 10, 119, 0, 0, 0};
    BOOST_REQUIRE_EQUAL(day1, convert_instance.JulianToGreenWich(2458790.18625f));
}

BOOST_AUTO_TEST_SUITE_END()
...