如何通过phpunit对一个方法进行单元测试,该方法具有多个内部调用保护/私有方法?

Posted

技术标签:

【中文标题】如何通过phpunit对一个方法进行单元测试,该方法具有多个内部调用保护/私有方法?【英文标题】:How to unit test a method has multi inner call protected/private method by phpunit? 【发布时间】:2016-11-24 14:14:44 【问题描述】:

我是单元测试的新手。 我的测试环境是 Laravel 上的 phpUnit。

我想知道如何通过 PHPUnit 对一个方法进行单元测试,该方法具有多调用保护/私有方法?

那些受保护/私有方法不仅返回预期值,而且在失败时抛出异常。

example.php 和 ExampleTest.php。

重要的问题是:如果我想测试 method2 或 method3 throwsexception,我需要通过 prev protected/private 方法(method1 或 method1+method2),可以吗?还是有更好的主意?

【问题讨论】:

【参考方案1】:

如果您一心想让私有方法抛出公共方法无法捕获的异常,那么它们必须抛出自定义异常,而不是泛型 \Exception(这实际上是一个好习惯)。因此,在您的测试中,您可以期望抛出自定义异常。

然后一般来说,我认为构造函数本身检查 args 的存在并在构造时抛出(如果总是会调用公共方法,或者让公共方法进行这些检查)会更好。它会限制四处投掷的次数。

PHPUnit作者关于测试私有方法的思考-https://sebastian-bergmann.de/archives/881-Testing-Your-Privates.html

【讨论】:

当然我做了一个自定义异常,然后抛出任何未找到的模型。我只是对依赖于多方法/类来获得结果的方法感到困惑,逐个模拟是一种好方法还是更好的主意?

以上是关于如何通过phpunit对一个方法进行单元测试,该方法具有多个内部调用保护/私有方法?的主要内容,如果未能解决你的问题,请参考以下文章

PHPstorm配置PHPunit对composer引入的php代码进行单元测试

使用 PHPUnit 在 Laravel 控制器中进行单元测试 Guzzle

如何对 PHP 特征进行单元测试

使用 PHPUnit 对 Laravel 4 进行单元测试

PHPUnit中的测试方法应该如何命名

PHPUnit 单元测试