2016-10-26 16 views
1
class Foo { 
    public function method() { 

    } 
    public function bar() { 

    } 
} 

私はクラスFooを持っている場合、私は以下の構文を使用してbarの動作を変更することができます。名前が「メソッド」のメソッドをモックアップする方法はありますか?

$stub = $this->createMock(Foo::class); 

$stub->expects($this->any()) 
    ->method('bar') 
    ->willReturn('baz'); 

制限:元のクラスは、「メソッド」という名前のメソッドを宣言していないとき、「法」という名前のメソッドが唯一の上に示された例は に動作します。 元のクラスが "method"というメソッドを宣言している場合、 $ stub-> expects($ this-> any()) - > method( 'doSomething') - > willReturn( 'foo'); を使用する必要があります。

https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.stubs


しかし、私の質問は、どのように私はPHPUnitのFoo::method()の動作を変更することができますか?出来ますか?

+0

PHPUnitはオープンソースなので、可能です。あなたがそれをフォークして自分で変更する必要があります。私はこれはあなたの質問ではないと思う、あなたの質問の範囲を狭くする気になるだろうか? – Dezza

+0

@Dezza PHPUnitを使って'Foo :: method'の動作をどうやって変更できますか? PHPUnitは現在そのような方法を提供していますか? – cither

+2

あなたの質問で '$ stub-> expects($ this-> any()) - > method( 'method') - > willReturn( 'foo')' – Dezza

答えて

2

これは正常に動作します: はPHP 7.0.9/PHPUnitでテスト済み4.8.27

public function testMethod() 
{ 
    $stub = $this->getMock(Foo::class); 

    $stub->expects($this->once()) 
     ->method('method') 
     ->willReturn('works!'); 

    $this->assertEquals('works!', $stub->method('method')); 
} 

EDIT:

はまた、PHP 7.0.9/5.6.2のPHPUnitでテスト:

public function testMethodWithDeprecatedGetMock() 
{ 
    $stub = $this->getMock(Foo::class); 

    $stub->expects($this->once()) 
     ->method('method') 
     ->willReturn('works!'); 

    $this->assertEquals('works!', $stub->method('method')); 
} 

public function testMethodWithCreateMock() 
{ 
    $stub = $this->createMock(Foo::class); 

    $stub->expects($this->once()) 
     ->method('method') 
     ->willReturn('works!'); 

    $this->assertEquals('works!', $stub->method('method')); 
} 

最初のメソッドの非推奨警告のみを表示しますが、テストパスは正常に表示されます。

+0

私の環境はPHP 7.0.12/PHPUnit 5.6.22です。 'getMock()'は廃止予定ですので、代わりに 'createMock()'を使用しています。そして、それは動作しません...私はそれを調べます。 – cither

+0

あなたのenvに確認します – Matteo

+1

簡単なテストで2番目の方法が正しく動作することを確認しました。たぶん、いくつかの他の要因が問題を引き起こしました。ありがとう。 – cither

関連する問題