如何使用Laravel以良好的方式测试存储库模式

时间:2014-09-04 13:51:24

标签: unit-testing laravel repository-pattern

所以我对测试缺乏经验,但我正在研究它。我读到的一件事是,测试不应该真正关心方法是如何做的,而是检查预期的结果。

考虑到这一点,我不确定我是否以有用的方式测试我的存储库。正如我在SO answer中所读到的那样,实际上几乎是在编写代码两次。

请考虑以下代码:

public function getUserCart($userId)
{
    return $this->shoppingcarts->whereUserId($userId)->first();
}

通过以下测试:

public function testGetUserCart()
{
    $shoppingcartMock = $this->mock('Shoppingcart');

    $shoppingcartMock->shouldReceive('whereUserId')->once()->with('some id')->andReturn($shoppingcartMock);
    $shoppingcartMock->shouldReceive('first')->once()->andReturn('cart');

    $repo = App::make('EloquentShoppingcartRepository');

    $this->assertEquals('cart', $repo->getUserCart('some id'));
}

我的测试通过并且我有代码覆盖率但是如果我要用$this->shoppingcarts->whereUserId($userId)->first()更改$this->shoppingcarts->where('user_id', $userId)->first(),那么测试当然会失败。

代码表现相同,在我看来,只要结果符合预期,一个好的测试不应该真正关心我使用的确切方法。

我的问题是双重的。测试存储库有用吗?如果是这样,我应该采取什么方法?

0 个答案:

没有答案