类似的内容在测试用例中没有像处理类似

时间:2015-09-15 15:23:56

标签: php json phpunit

我一直在实施JsonExporter,并且自JSON_PRETTY_PRINT添加后,测试用例无法再修复。 phpunit仍然认为输出存在差异,但实际上并非如此:

// code of the testcase
$exporter->export($outFile, array(
    'key.a' => 'aaa',
    'key.b' => 'bbb',
    'key.c' => 'ccc',
));
$expectedContent = <<<EOL
{
    "key.a": "aaa",
    "key.b": "bbb",
    "key.c": "ccc"
}
EOL;
$this->assertEquals($expectedContent, file_get_contents($outFile));

一直在使用多个分隔符进行测试,<<<CPHP_EOL也无法修复测试用例。测试用例总是失败,但输出没有区别:

Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
 '{
     "key.a": "aaa",
     "key.b": "bbb",
     "key.c": "ccc"
 }'

我们如何让这个测试用例通过?

修改Exporter只做一个简单的json_encode

/**
 * {@inheritdoc}
 */
public function export($file, $translations)
{
    $bytes = file_put_contents($file, json_encode($translations, JSON_PRETTY_PRINT));

    return ($bytes !== false);
}

1 个答案:

答案 0 :(得分:1)

PHPUnit实现了一些将比较JSON数据的断言:

这些将比较数据结构,而不是JSON字符串格式。