私はメソッドを呼び出してレスポンスをアサートするかなり標準的なユニットテストを作成しようとしていますが、テストしているメソッドは同じクラス少し重い持ち上げをします。モックを必要とする他のクラスメソッドを呼び出すphpunitのテストメソッド
私はその1つのメソッドを模擬したいが、私はそのままテストしているメソッドを実行し、他のメソッドの呼び出しから返された模擬値でのみ実行します。
私はこの例をできるだけシンプルにすることを愚かにしました。
class MyClass
{
// I want to test this method, but mock the handleValue method to always return a set value.
public function testMethod($arg)
{
$value = $arg->getValue();
$this->handleValue($value);
}
// This method needs to be mocked to always return a set value.
public function handleValue($value)
{
// Do a bunch of stuff...
$value += 20;
return $value;
}
}
私はテストを書くことを試みました。
class MyClassTest extends \PHPUnit_Framework_TestCase
{
public function testTheTestMethod()
{
// mock the object that is passed in as an arg
$arg = $this->getMockBuilder('SomeEntity')->getMock();
$arg->expects($this->any())
->method('getValue')
->will($this->returnValue(10));
// test handle document()
$myClass = new MyClass();
$result = $myClass->testMethod($arg);
// assert result is the correct
$this->assertEquals($result, 50);
}
}
私は、MyClassのオブジェクトをからかっ試してみましたが、私はそれを行うとのtestMethodを呼び出すときは、常にnullを返します。私は1つの方法を模擬する方法が必要ですが、オブジェクトの残りの部分はそのまま残しておきます。
いい回答です、ありがとうございます。 – greg
メソッド 'handleValue'が別のクラスにある場合はどうすればいいですか? – Somar
良い答え、私はテストメソッドと模擬メソッドの間で部分モックを使用する必要があるときにテスト依存関係を適用します(ロジックをリファクタリングすることが不可能な場合) – kurroman