PHPUnit是否允许我根据传入的参数指定返回值。以下是500错误:
//模拟会话值
$container->get('session')
->method('get')
->with(SESSION_FILTER_MONTH)
->willReturn('2017-05');
$container->get('session')
->method('get')
->with(SESSION_FILTER_FUND)
->willReturn(1);
在我的应用中,以下行引发异常:
$fundId = $container->get('session')->get(SESSION_FILTER_MONTH); // works OK
$fundId = $container->get('session')->get(SESSION_FILTER_FUND); // breaks: should return 1 in my tests
但是,如果我只有一个方法模拟声明,例如:
// $container->get('session')
// ->method('get')
// ->with(SESSION_FILTER_MONTH)
// ->willReturn('test_return');
$container->get('session')
->method('get')
->with(SESSION_FILTER_FUND)
->willReturn('test_return_fund');
//...
// $fundId = $container->get('session')->get(SESSION_FILTER_MONTH);
$fundId = $container->get('session')->get(SESSION_FILTER_FUND); // works this time!
...然后它运作正常。似乎它只需要单个方法模拟声明,即使我使用with()方法提供不同的参数 - 我希望返回值基于此变化。
我也没有从控制台获得太多信息,只是在没有异常消息的情况下告诉我Failed asserting that 500 matches expected 302.
。我甚至尝试在try..catch块中包装代码但不改变输出。
答案 0 :(得分:2)
您可以使用returnValueMap
更改模拟返回的值。
https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.stubs.examples.StubTest5.php
此方法采用一个数组,其中前n个值是正在使用的参数,最后一个值是返回值。
所以你的模拟看起来像这样:
$map = [
[ SESSION_FILTER_MONTH, '2017-05'],
[ SESSION_FILTER_FUND, 'test_return_fund']
];
$container->get('session')
->method('get')
->will($this->returnValueMap($map));