这是我正在单元测试的课程。目前我正在测试该doSomething
功能:
class FooClass {
public function doSomething( $user ) {
$conn = $this->getUniqueConnection( $user->id );
$conn->doSomethingDestructive();
}
private function getUniqueConnection( $id ) {
return new UniqueConnection( $id );
}
}
如您所见,该函数根据它接收到的参数的属性获取(我不在此处测试的类)doSomething
的新实例。UniqueConnection
问题是该UniqueConnection:: doSomethingDestructive
方法是我在测试期间无法调用的东西,因为它...具有破坏性。所以我想存根/模拟UniqueConnection
而不是使用真实的。
我看不到任何方法可以注入我的 mocked UniqueConnection
。我会UniqueConnection
为构造函数创建一个参数,FooClass
但是,正如您所看到的,一个新的参数是基于doSomething
函数的参数创建的,并且它可能被调用的所有唯一 ID 都是提前不知道的。
我能看到的唯一选择是测试一个模拟FooClass
而不是FooClass
它本身。然后我将用getUniqueConnection
返回模拟/存根的函数替换该函数。测试模拟似乎很糟糕,但我看不出有任何方法可以实现我所追求的目标。 UniqueConnection
是第三方供应商库,无法修改。