如何模拟RedBean进行单元测试

时间:2014-01-31 02:18:34

标签: php unit-testing redbean

我刚刚开始使用RedBean来进行小型PHP网页项目。我正在为每个班级构建单元测试。我不确定如何在单元测试中模拟RedBean。

问题:如何模拟RedBean类以支持单元测试?

1 个答案:

答案 0 :(得分:1)

这就是我所做的。到目前为止似乎工作得很好。我能够对我的模型进行单元测试,并且我已经通过静态RedBean函数调用进行了隔离:

  1. 我围绕我正在使用的RedBean静态函数创建了一个瘦包装类。
  2. 我将这个瘦包装类传递给我的每个模型类。
  3. 模型类将此瘦包装器用于CRUD RedBean数据。
  4. 直接引用RedBean的唯一地方是瘦包装。
  5. 在我的单元测试中,我只是嘲笑薄包装。
  6. 以下是一些示例测试代码:

    $db         =  M::mock( 'BeanDatabase' );
    $bean       =  M::mock( 'Bean' );
    $factory    =  M::mock( 'EntityFactory' );
    $term_bean  =  M::mock( 'Bean' );
    $term       =  M::mock( 'Term' );
    
    $db->shouldReceive( 'dispense' )
        ->once( )
        ->andReturn( $bean );
    
    $db->shouldReceive( 'find_all' )
        ->once( )
        ->with( 'term', 'WHERE termcategory_id = 5' )
        ->andReturn( array( $term_bean ) );
    
    $factory->shouldReceive( 'create_entities_from_beans' )
        ->once( )
        ->with( array( $term_bean ) )
        ->andReturn( $term );