gpt4 book ai didi

phpunit 检查测试类上是否调用了方法

转载 作者:行者123 更新时间:2023-12-01 22:35:52 26 4
gpt4 key购买 nike

假设我有这个代码块:

$i = 1;

if ($i > 1) {
$this->methodOne();
} else {
$this->methodTwo();
}

如何检查 PHPUnit 测试中的测试类是否调用了 methodOne 或 methodTwo?

最佳答案

methodOne 和 methodTwo 是公共(public)的吗?如果是,那么您也可以为这些添加测试,以确保它们正确工作,以便您对方法的其他代码进行断言。如果它们不是公共(public)的,那么根据讨论中方法的输出,您可以知道调用了哪个方法。

最后,我认为您对类的正确行为更感兴趣,而不是对被调用方法的内部链更感兴趣。另请记住,单元测试应该进行黑盒测试,而不应该关心被测试方法的实现。

最后,对 $this 调用的方法进行断言将使您的测试与类的实现紧密耦合。因此,如果您重构该类,您还需要更新不再起作用的测试。并且测试内部方法是否按照您需要的顺序调用变得更加困难。

抛开所有这些讨论,这并不意味着您所要求的事情无法完成。您可以使用部分模拟( https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.mock-objects ),并在部分模拟上进行断言,而不是创建新的测试对象。例如:

$testedObject = $this->getMock('MyClass',array('methodOne', 'methodTwo'))

将为您提供一个对象,其中仅 methodOne 和 methodTwo 被 PHPUnit 替换。然后,您可以对需要调用哪些方法设置期望:

$testedUnit = $this->getMock('MyClass',array('methodOne', 'methodTwo'));
$testedUnit->expects($this->once())
->method('methodOne');
// setup the condition so that the tested method calls methodOne()
// ...
$testedUnit->testedMethod();

关于phpunit 检查测试类上是否调用了方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29621684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com