【发布时间】:2021-03-02 00:32:11
【问题描述】:
我有一个带有解析器的简单类
class Parser
{
public function __construct(P1 $p1, P2 $p2)
{
$this->p1 = $p1;
// etc...
}
public function parse()
{
$this->doSomething1();
return $this->doSomething2(P3 $p3);
}
}
然后我有我的测试课
class ParserTest
{
public function testParse()
{
$p1 = $this->getMockBuilder(P1::class)->disableOriginalConstructor()->getMock();
$p2 = $this->getMockBuilder(P2::class)->disableOriginalConstructor()->getMock();
$p3 = $this->getMockBuilder(P3::class)->disableOriginalConstructor()->getMock();
$parser = new Parser ($p1, $p2);
$result = $parser->parse($p3);
}
}
我需要为测试禁用 doSomething1,因为它基本上是在进行 API 调用,所以我可以测试结果。我该怎么做?
【问题讨论】:
-
这是您需要重构代码的标志。解析器不应该通过 API 获取数据,它应该只解析给定的数据。将提取提取到单独的服务类并将其结果作为参数传递给
parse方法是明智的。 -
是的,我怀疑我必须这样做,我只是在徘徊,那里有更快的方法。还是谢谢。
-
哪个可见性有
doSomething1方法?也许您可以使用部分模拟...