所以我对测试缺乏经验,但我正在研究它。我读到的一件事是,测试不应该真正关心方法是如何做的,而是检查预期的结果。
考虑到这一点,我不确定我是否以有用的方式测试我的存储库。正如我在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()
,那么测试当然会失败。
代码表现相同,在我看来,只要结果符合预期,一个好的测试不应该真正关心我使用的确切方法。
我的问题是双重的。测试存储库有用吗?如果是这样,我应该采取什么方法?