【问题标题】:How to Mock RedBean for Unit Testing如何模拟 RedBean 进行单元测试
【发布时间】:2014-01-31 02:18:34
【问题描述】:

我刚刚开始将RedBean 用于一个小型 PHP 网页项目。我正在为我的每个课程构建单元测试。我不确定如何在单元测试中模拟 RedBean。

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

【问题讨论】:

    标签: php unit-testing redbean


    【解决方案1】:

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

    1. 我围绕我正在使用的 RedBean 静态函数创建了一个瘦包装类。
    2. 我将这个瘦包装类传递给我的每个模型类。
    3. 模型类使用这个瘦包装器来 CRUD RedBean 数据。
    4. 唯一直接引用 RedBean 的地方是瘦包装器。
    5. 在我的单元测试期间,我只是模拟了瘦包装器。

    这里是一些示例测试代码:

    $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 );
    

    【讨论】:

    • 这听起来是个不错的解决方案。我有类似的情况,不过我是新手:模拟的瘦包装器实际上做了什么 - 它是否检查其成员函数是否被调用,然后将硬编码的假数据返回到测试范围?
    猜你喜欢
    • 2018-04-04
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多