相关疑难解决方法(0)

PHPUnit中的模拟 - 使用不同参数的相同方法的多个配置

是否可以以这种方式配置PHPUnit mock?

$context = $this->getMockBuilder('Context')
   ->getMock();

$context->expects($this->any())
   ->method('offsetGet')
   ->with('Matcher')
   ->will($this->returnValue(new Matcher()));

$context->expects($this->any())
   ->method('offsetGet')
   ->with('Logger')
   ->will($this->returnValue(new Logger()));
Run Code Online (Sandbox Code Playgroud)

我使用PHPUnit 3.5.10,当我要求Matcher时它会失败,因为它需要"Logger"参数.这就像第二个期望是重写第一个,但是当我转储模拟时,一切看起来都不错.

php phpunit mocking

49
推荐指数
4
解决办法
2万
查看次数

如何重置PHPUnit模拟对象的期望

我在TestCase中进行了大量测试.我想设置一个模拟对象,在大多数测试中返回相同的值,但在一些测试中我想自定义该值.

我的想法是创建一个set_up()方法(我无法在自动调用的内部设置期望setUp()),并在每次测试开始时手动调用它.在这个方法中,我会设置默认的返回值,然后在需要自定义返回值的少数测试中,我会第二次调用expect,并希望覆盖默认的返回值.这不起作用,返回值不会被覆盖.

这是一个简化的例子:

<?php

class SomeClass {
    function someMethod() {
    }
}

class SomeTest extends PHPUnit_Framework_TestCase {
    private $mock;

    function set_up() {
        $this->mock = $this->getMockBuilder('SomeClass')
            ->disableOriginalConstructor() // This is necessary in actual program
            ->getMock();
        $this->mock->expects($this->any())
            ->method('someMethod')
            ->will($this->returnValue(1));
    }

    function test() {
        $this->set_up();

        $this->mock->expects($this->any())
            ->method('someMethod')
            ->will($this->returnValue(2));

        $this->assertEquals(2, $this->mock->someMethod());
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来应该可以通过阅读如何使用PHPUnit重置Mock对象.

带有多个expected()调用的PHPUnit mock不能回答我的问题.

我使用的是phpUnit 4.2

php phpunit unit-testing mocking

3
推荐指数
1
解决办法
2292
查看次数

标签 统计

mocking ×2

php ×2

phpunit ×2

unit-testing ×1