38

ServiceB を使用する ClassA があります。場合によっては、ClassA が ServiceB のメソッドをまったく呼び出さないことがあります。私は今これをテストしたいのですが、実際にメソッドが呼び出されていないことを確認してください。

これは次のように行うことができます。

$classA->expects( $this->never() )->method( 'first_method' );
$classA->expects( $this->never() )->method( 'second_method' );
...

各メソッドに制限を指定するのではなく、単に「このオブジェクトに対してメソッドを呼び出すべきではない」と述べる方法はありますか?

4

3 に答える 3

77

はい、それは非常に簡単です、これを試してください:

$classA->expects($this->never())->method($this->anything());
于 2013-09-11T19:33:48.713 に答える
2

メソッドを使用できますMockBuilder::disableAutoReturnValueGeneration

たとえば、テストで default を上書きしますTestCase::getMockBuilder

    /**
     * @param string $className
     * @return MockBuilder
     */
    public function getMockBuilder($className): MockBuilder
    {
        // this is to make sure, that not-mocked method will not be called
        return parent::getMockBuilder($className)
            ->disableAutoReturnValueGeneration();
    }

利点:

  • すべてのモックは、モックされたメソッド以外を呼び出すことは期待されません。->expects(self::never())->method(self::anything())それらすべてにバインドする必要はありません
  • 新しいモックを設定することもできます。->expects(self::never())->method(self::anything())できなくなった後

PhpUnit v7.5.4 (およびおそらくそれ以降) で動作します。

于 2020-06-24T09:04:52.617 に答える