2015-08-22 2 views
0

Я пишу некоторые тесты phpunit, чтобы проверить пользовательский класс json, который я написал.может json_encode (...) когда-либо возвращать false с массивом?

У меня есть некоторый код, который я хотел бы проверить ...

... 
$contents = json_encode($data); 
if(false === $contents) 
{ 
    ... 
} 
... 

Но если «$ данных» является массив, то он никогда не возвращает ложь, даже если я прохожу некоторые недопустимые параметры результат что-то вдоль line of

{null:null} 

Как я могу протестировать encode_json (...), возвращая false при передаче массива?

+0

Вы можете попытаться издеваться над поведением o f функция 'json_encode' с [this] (https://github.com/tcz/phpunit-mockfunction) расширение phpunit, использующее использование runkit – Matteo

ответ

2

Заканчивать документации PHP для json_last_error(): https://secure.php.net/manual/en/function.json-last-error.php

Это есть пример, который вызывает json_encode() сбой, который я адаптированный здесь, чтобы использовать массив для демонстрационных целей:

<?php 
// An invalid UTF8 sequence 
$text = ["text" => "\xB1\x31"]; 

$json = json_encode($text); 
$error = json_last_error(); 

var_dump($json, $error === JSON_ERROR_UTF8); 
?> 

При выполнении этого , Я получаю этот ожидаемый результат, указав ошибку json_encode:

$ php php-test.php 
bool(false) 
bool(true) 
+0

Это строка, а не массив, как в моем вопросе, попробуйте и закодируйте [" \ xB1 \ x31 "=>" \ xB1 \ x31 "], и он не возвращает false. – FFMG

+0

Вы пытаетесь выполнить unit test 'json_encode()'? – Jeff

+0

Нет, как я уже упоминал в своем вопросе, это особый класс. Но, несмотря на это, вопрос все еще стоит, как он может возвращать false с массивом (как, например, с строкой). – FFMG