1

所以我有一个非常简单(至少现在是这样)的模型,它通过它的主键 ID 返回一个联系人:

class Model_Contact extends \Fuel\Core\Model
{
    public function get_by_id($contact_id)
    {
        return Entity_Contact::find_by_pk($contact_id);
    }
}

该类Entity_Contact看起来像这样(省略了无关的数组内容):

class Entity_Contact extends \Core\Entity_Base
{
    protected static $_table_name = 'contacts';
    protected static $_properties = array(...);
    protected static $_public_settable_properties = array(...);
    protected static $_rules = array(...);
}

注意:\Core\Entity_Base扩展\Fuel\Core\Model_Crud

我可能会在这样的控制器中使用它:

$model = new Model_Contact();
$contact = $model->get_by_id(4);

我知道为了对此进行单元测试,我应该模拟出实际的数据库调用 ( Entity_Contact::find_by_pk),但我不确定如何执行此操作。由于我使用的是 Fuel 的Model_crud功能(其中 DB 访问器实际上是域对象模型的一部分),我不确定我是否可以完全模拟数据库——或者我可能遗漏了一些东西。

所以问题是:您将如何编写测试Model_Contact::get_by_id()

提前致谢!

4

2 回答 2

1

You can mock it easily if you use AspectMock. https://github.com/Codeception/AspectMock

于 2015-02-09T06:48:03.917 回答
0

您的测试可能必须创建对象,以便您可以测试您的方法。

  1. Create the objects that get stored to the database.
  2. Test get_by_id
  3. Delete your created object

It's not the most glorious thing in the world, but it would accomplish testing your method... meh?

于 2012-11-29T18:21:11.047 回答