- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 phpunit 和 mockery 在 laravel 中学习单元测试。我目前正在尝试测试 UsersController::store()。
我正在模拟用户模型并使用它来测试索引方法,这似乎有效。当我取出 $this->user->all() 时,测试失败,当它通过时。
在测试存储方法时,尽管我使用模拟来测试用户模型是否接收过一次 validate()。 store 方法是空的,但测试通过了。为了简洁起见,我省略了类(class)中不相关的部分
<?php
class UsersController extends BaseController {
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$users = $this->user->all();
return View::make('users.index')
->with('users', $users);
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
return View::make('users.create');
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
//
}
}
UserControllerTest.php
<?php
use Mockery as m;
class UserControllerTest extends TestCase {
public function __construct()
{
$this->mock = m::mock('BaseModel', 'User');
}
public function tearDown()
{
m::close();
}
public function testIndex()
{
$this->mock
->shouldReceive('all')
->once()
->andReturn('All Users');
$this->app->instance('User', $this->mock);
$this->call('GET', 'users');
$this->assertViewHas('users', 'All Users');
}
public function testCreate()
{
View::shouldReceive('make')->once();
$this->call('GET', 'users/create');
$this->assertResponseOk();
}
public function testStore()
{
$this->mock
->shouldReceive('validate')
->once()
->andReturn(m::mock(['passes' => 'true']));
$this->app->instance('User', $this->mock);
$this->call('POST', 'users');
}
}
最佳答案
默认情况下,Mockery 是一个 stub 库,而不是一个模拟库(因其名称而令人困惑)。
这意味着 ->shouldReceive(...)
默认是“零次或多次”。当使用 ->once()
时,你说它应该被调用零次或一次,但不能更多。这意味着它总会过去。
当你想断言它被调用一次时,你可以使用->atLeast()->times(1)
(一次或多次)或->times(1 )
(恰好一次)
关于php - mockery->shouldReceive() 在不应该通过的时候通过了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531033/
我们有大量使用 JMock 2.5.1 编写的单元测试,其中大多数(全部?)使用本地 Mockery 对象,例如: @RunWith(JMock.class) public class SomeTes
我编写了一个从 aws s3-bucket 获取单个文件的导入函数。 该函数本身是 aws.s3::s3read_using() 的包装器,它将读取函数作为其第一个参数。 为什么要环绕 aws.s3:
我刚开始使用 Mockery并与术语 alias 和 overload 混淆。谁能给我解释一下什么时候使用哪个? 最佳答案 Overload 用于创建“实例模拟”。当创建一个类的新实例时,这将“拦截”
我使用 Laravel (4.1) 框架并阅读了“Laravel-testing-decoded”,这是 Jeffrey Wey 的电子书。 我想测试我的模态用户和我的方法 setPasswordAt
我从一周开始学习 phpunit。我不知道如何只模拟测试类中的一种方法。 (这只是示例,所以我没有写命名空间)。也许你可以帮助我 class SomeService { public func
我希望能够使用 Mockery 在 java 中模拟 File 对象。我似乎无法在 Java 中为文件创建接口(interface)。这可能吗? 编辑: 我需要测试 Indexer 类中的 index
我正在使用 phpunit 和 mockery 在 laravel 中学习单元测试。我目前正在尝试测试 UsersController::store()。 我正在模拟用户模型并使用它来测试索引方法,这
我需要测试,代码创建了一个具有特定参数的类的新实例: $bar = new ProgressBar($output, $size); 我试图创建一个别名 mock 并为 __construct 方法设
我正在尝试在 Controller 中正确模拟对 Eloquent 模型的链式调用。在我的 Controller 中,我使用依赖注入(inject)来访问模型,以便模拟它应该很容易,但是我不确定如何测
我正在尝试测试一个简单的类。我正在学习本教程 ( http://code.tutsplus.com/tutorials/testing-laravel-controllers--net-31456 )
我想使用Mokcery mock一个已经在另一个方法中使用过的静态方法,如下: Class SomeClass { public static function methodA() {
TLDR;使用相同参数调用 mock shouldReceive('method)` 时,如何第一次获取 value1 和第二次获取 value2? 假设我有一个 $order 对象,该对象使用 ge
我想使用 Mockery 并改变它: $mockFoo = $this->getMockBuilder('Foo') ->disableOriginalConstructor()
如果使用 JMock 编写带有模拟的 Java 单元测试,我们应该使用 Mockery context = new Mockery() 或者 Mockery context = new JUnit4M
我正在尝试为我的网络应用程序编写一些单元测试。我使用 Laravel 5.3 和 Mockery。 这是简化的代码: class UserService { protected $userRe
我能以某种方式更新特定 shouldReceive 的 shouldReturn 值吗? 例如,我有几个使用一个返回值的测试,只有一个使用其他返回值。 所以我把它放在了 setUp 中: $this-
我目前正在为 Laravel 4 中的一个包编写测试。 我在模拟 Illuminate\Database\Query\Builder 它几乎一直工作,除非 where 方法使用回调,我无法检查内部方法
这可能是我对模拟的误解。我真的很感激关于为什么模拟一个不存在或存在的类是一件好事的解释? 示例场景:假设我们有一个类依赖于第二个类的输出,我们更改了输出格式或其他格式。这不会让我们的测试保持成功,尽管
我正在尝试测试我的一个服务类,但无法通过 PHPUnit 测试。 测试失败的相关部分: File::shouldReceive('put')->with('app/storage/logs/larav
如何在流明框架中使用模拟? 我使用流明框架。 lumen的文档很简单。我不知道如何使用 mockery 或 facades 来模拟模型。我尝试了一些方法,但没有人奏效。我想在 updatePasswo
我是一名优秀的程序员,十分优秀!