【问题标题】:How to test MissingParameterException in cakephp?如何在 cakephp 中测试 MissingParameterException?
【发布时间】:2017-10-14 05:38:00
【问题描述】:

我已经尝试过在 stackoverflow 中发布的所有其他帖子,但我无法弄清楚。所以这意味着我应该问。

    public function bootstrapRadioButtons(
    $name,
    $options,
    $value = '',
    $divClass = '',
    $label = array('class' => 'control-label')
) {
    if (!isset($name) || !isset($options)) {
        throw new MissingParameterException(__d('cockpit', 'Variable name must be set.'));
    } else {

有人可以写一个测试这个 MissingParameterException 的测试吗?有没有一种特殊的方法可以使用 cakephp 进行测试?

这是我目前所拥有的:

    /**
 * @expectException App\Exception\MissingParameterException
 */
public function testNameAndOptionsAreEmpty()
{
    $this->CommonHelper->bootstrapRadioButtons('', '');
}

这是我在课堂上使用的:

使用 App\Exception\MissingParameterException;

这正是 MissingParameterException 的来源,但这个测试仍然返回错误。

    /**
 * setUp method
 *
 * @return void
 */
public function setUp()
{
    parent::setUp();
    $view = new View();
    $this->CommonHelper = new CommonHelper($view);
}

【问题讨论】:

    标签: php exception cakephp phpunit cakephp-3.0


    【解决方案1】:

    检查 !isset($name) 和 !isset($options) 的条件是多余的,因为此函数需要 $name 和 $options 参数,并且 php 会在执行代码之前抛出异常。如果您想检查它们是否为空,请使用以下代码:

    if (empty($name) || empty($options)) {
        throw new MissingParameterException('Variable name must be set.');
    }
    

    在这种情况下,测试将如下所示:

    /**
     * @expectedException \Full\Namespace\To\MissingParameterException
     */
    public function testNameNadOptionsAreEmpty()
    {
        $class = new \Your\Class();
        $class->bootstrapRadioButtons('', '');
    }
    

    【讨论】:

    • 您遇到了什么错误?第一的。您是否更改了检查 $name 和 $option 的代码?因为在当前实现中 (!isset($name) || !isset($options)) 不起作用。正如我所写,您需要将条件更改为 (empty($name) || empty($options))。第二。尝试在 expectedException 中使用带反斜杠的完整类路径:\App\Exception\MissingParameterException;
    • 是的,我听从了你的建议,把它改成了empty($name) ||空($options),但我无法找到正确的命名空间:-/
    • 你确定这个类存在吗?我的意思是 MissingParameterException 类。因为我创建了相同的测试用例,它适用于我gist.github.com/sauron07/967c7a2e1c9989caa31f6371bf7cad0c
    • 不,默认不存在。我们创造了它。我听从了你的第二个建议,现在可以了。再次感谢。
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2021-08-14
    • 2011-07-29
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多