3

我正在 Laravel 4.1 中编写我的第一个 Artisan 命令,并希望获得一些关于如何测试它的想法。我的命令做一件事(现在)。它基本上从数据库中删除指定天数的表条目(注释)。


命令示例:

OneTimeNote:delete --days=25

该命令适用于出色的工作。但是我首先出于学习目的编写了该命令,现在我希望通过测试来遵循它。我正在使用 PHPUnit 和嘲弄。


命令代码: http: //pastebin.com/index/dZrxpt8x

如您所见,我正在注入我的 Note 实现(用于抽象),然后我正在执行其中一个方法“deleteNotesOlderThan(int $days)”。就像我说的,这一切都很好,花花公子。当我尝试测试事物时,我的问题就开始了。


命令测试: http: //pastebin.com/6UwxGvcN

如果您查看代码,您可以看到我被困在哪里。如何模拟我的 Note 方法并生成命令测试?另外我应该用这个特定的命令测试什么样的东西?

先感谢您

4

1 回答 1

6

我的建议是遵循 Laravel 中为您提供的示例。

从框架中选择一个随机的工匠测试,看起来您不需要 Symfony 的“CommandTester”类,而是您只需实例化即可。

来自https://github.com/laravel/framework/blob/master/tests/Foundation/FoundationConfigPublishCommandTest.php:(链接主题变得陈旧)

public function testCommandCallsPublisherWithProperPackageName()
{
    $command = new Illuminate\Foundation\Console\ConfigPublishCommand($pub = m::mock('Illuminate\Foundation\ConfigPublisher'));
    $pub->shouldReceive('publishPackage')->once()->with('foo');
    $command->run(new Symfony\Component\Console\Input\ArrayInput(array('package' => 'foo')), new Symfony\Component\Console\Output\NullOutput);
}

所以你实例化你的命令,传入你的模拟存储库接口,将你的期望添加到模拟中,然后调用run命令,传入“假”输入和输出类。

于 2014-02-20T16:44:45.313 回答