我很好奇我是否正在做这件事,因为我刚接触测试。
我有两项服务(目前为止),AuthService
和CommentService
。 CommentService
取决于AuthService
,而AuthService
取决于第三方类(\SlimSession\Helper
)。
在AuthService
的单元测试中,我只是模拟\SlimSession\Helper
并将模拟提供给构造函数。
现在,在我对CommentService
的测试中,我嘲笑AuthService
并将其提供给CommentService
的构造函数。但我还必须再次创建\SlimSession\Helper
的模拟,以将其提供给我的模拟AuthService
的构造函数。
$session = $this->getMockBuilder('\SlimSession\Helper')
->getMock();
$auth = $this->getMockBuilder('\App\Service\AuthService')
->setConstructorArgs([$session])
->getMock();
$auth->expects($this->any())->method('isLoggedIn')->willReturn(false);
$auth->expects($this->any())->method('getLoggedInUserId')->willReturn(0);
这是对的吗?向模拟对象提供(模拟)依赖关系似乎有点愚蠢,因为它无论如何都不会使用该依赖。
我的问题特别关注PHPUnit
,但我想一般可以进行单元测试。