Test altındaki eski bir kod temeli almak için çalışırken, ben aşağıdaki bir nesneye rastlamak ettik:
class Foo
{
public function __construct($someargs)
{
$this->bar = new Bar();
// [lots more code]
}
}
Bu durumda bar bazı Bad Things örneğin yapan bir kurucusu vardır Bir veritabanına bağlanıyor. Ben bu yüzden böyle bir şey için değişti test altında bu Foo sınıf almak konsantre çalışıyorum:
class Foo
{
public function __construct($someargs)
{
$this->bar = $this->getBarInstance();
// [lots more code]
}
protected function getBarInstance()
{
return new Bar();
}
}
Ve şu PHPUnit testi ile test çalıştılar:
class FooTest extends PHPUnit_Framework_TestCase
{
public function testInstance()
{
$bar = $this->getMock('Bar');
$foo = $this->getMock('Foo', array('getBarInstance'));
$foo->expects($this->any())
->method('getBarInstance')
->will($this->returnValue($bar));
}
}
Ancak bu işe yaramazsa -> () eklendi beklediğini, bu yüzden alay getBarInstance () yöntemi null döndürür - Foo (yapıcısı) benim önce denir.
Sınıf Kurucular kullandığı yol refactor kalmadan bu bağımlılık bağlantısını kaldırırken herhangi bir yolu var mı?