symfony phpunit未收到预期值
我试图在Symfony中测试我的服务中的一个简单功能 函数获取post值(如果存在)并设置多维数组。 这是我在服务中的功能:symfony phpunit未收到预期值,php,phpunit,tdd,symfony,Php,Phpunit,Tdd,Symfony,我试图在Symfony中测试我的服务中的一个简单功能 函数获取post值(如果存在)并设置多维数组。 这是我在服务中的功能: public function setValue(Request $request) { for($i = 1; $i <= 3; $i++){ for($j = 1; $j <= 3; $j++){ if(($request->request->get('cell_'
public function setValue(Request $request)
{
for($i = 1; $i <= 3; $i++){
for($j = 1; $j <= 3; $j++){
if(($request->request->get('cell_' . $i . '_' . $j) != null){
$value = $request->request->get('cell_' . $i . '_' . $j);
echo('Value: ' . $value . '|');
$this->tiles[$i][$j] = $value;
}
else{
$this->tiles[$i][$j] = '0';
}
}
}
}
在这种情况下,理论上我只设置了一个值为1的单元格,但当我转储所有结果时,我得到了这个值
array(3) {
[1] =>
array(3) {
[1] =>
NULL
[2] =>
string(1) "0"
[3] =>
string(1) "0"
}
[2] =>
array(3) {
[1] =>
string(1) "0"
[2] =>
string(1) "0"
[3] =>
string(1) "0"
}
[3] =>
array(3) {
[1] =>
string(1) "0"
[2] =>
string(1) "0"
[3] =>
string(1) "0"
}
}
因为在cell_1_1
中,我检查了一个空值,但我希望1
不是空的!
如何返回1
单元格内的cell\u 1\u 1
,我的模拟错误是什么
谢谢您没有填充数组的索引
0
看看你的循环:
...
for($i = 1; $i <= 3; $i++){
for($j = 1; $j <= 3; $j++){
...
get
返回null的原因是at()
的索引已经由第一次调用(在if语句中)递增
我发现一些关于它的有用信息具有误导性
您可能根本不想麻烦处理expects()
和at()
,因为它实际上并不反映实际参数包的行为,无论何时调用它,它都会返回相同的参数包
只有当名称为cell_1_1时,才可以使用带有回调的模拟对象返回“1”,如下所示:
$this
->requestMock
->request
->method('get')
->will($this->returnCallback(function ($name) {
return $name === 'cell_1_1' ? '1' : null;
}));
或者,您也可以使用Symfony请求本身,让您自己变得更加复杂:-)
使用real Request进行测试的示例代码:
$request = new Request([], ['cell_1_1' => '1']);
$board = new Board();
$board->setValue($request);
我试过了,同样的错误,这个解决方案不起作用。第一个if块中缺少的
)
只是复制过来的一个错误?我试图重新创建这个,这是我注意到的第一件事。是的,对不起,这是复制过来的错误
$this
->requestMock
->request
->method('get')
->will($this->returnCallback(function ($name) {
return $name === 'cell_1_1' ? '1' : null;
}));
$request = new Request([], ['cell_1_1' => '1']);
$board = new Board();
$board->setValue($request);