如何通过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代码进行单元测试