在googletest

时间:2016-08-22 17:50:08

标签: json unit-testing googletest

我有一些功能要测试:

std::string getJsonResult(const SomeDataToProcessData& data);

目标是使用googletest框架进行单元测试。 我不能将输出比作字符串,因为相同的JSON可以有不同的格式。 E.g:

{"results":[], "status": 0}

VS

{
    "results":[], 
    "status": 0
}

我的这个问题的解决方案可以作为JUnit的附加library使用,但我的项目是用C ++编写的。

如何使用gtest进行JSON格式的字符串断言?是否有已知的实施?

1 个答案:

答案 0 :(得分:1)

假设您有一些json_parsing /格式库可用,它只是编写您自己的谓词的问题:

#include <gtest/gtest.h>
#include <string>

// simulated JSON api
struct json_object {};
extern json_object parse(std::string json);
extern std::string format_lean(json_object const& jo);

testing::AssertionResult same_json(std::string const& l, std::string const& r)
{
    auto sl = format_lean(parse(l));
    auto sr = format_lean(parse(r));
    if (sl == sr)
    {
        return testing::AssertionSuccess();
    }
    else
    {
        return testing::AssertionFailure() << "expected:\n" << sl << "\n but got:\n" << sr;
    }
}

std::string make_some_json();

TEST(xxx, yyy)
{
    auto j_expected = std::string(R"__({ foo: [] })__");
    auto j_actual = make_some_json();

    ASSERT_TRUE(same_json(j_expected, j_actual));
}