如何对构造函数带有一些参数的类的方法进行单元测试?

2023-12-19

我有一类类似这样的形式:

class A{  
    public function __constructor(classB b , classC c){
    //
    }

    public function getSum(var1, var2){
        return var1+var2;
    }
}

我的测试用例类是这样的:

use A;   
class ATest extends PHPUnit_Framework_TestCase{  

    public function testGetSum{  
        $a = new A();
        $this->assertEquals(3, $a->getSum(1,2));  
    }  
}  

但是,当我运行 phpunit 时,它会抛出一些错误,例如:

Missing argument 1 for \..\::__construct(), called in /../A.php on line 5

即使我提供参数,它也会抛出相同的错误,但在不同的文件中。
说,我实例化$a = new A(new classB(), new classC());

然后,我对类的构造函数遇到相同的错误(B 类的构造函数与 A 类的构造函数具有类似的形式)。

Missing argument 1 for \..\::__construct(), called in /../B.php on line 10

有没有其他方法,我可以测试该功能或我缺少的东西。

我不想使用模拟(getMockBuilder(),setMethods(),getMock())进行测试,因为它似乎违背了单元测试的整个目的。


单元测试背后的基本思想是测试类/方法本身,而不是此类的依赖项。为了对你的课程进行单元测试A你不应该使用构造函数参数的真实实例,而应该使用mocks反而。PHPUnit提供了很好的创建方法,因此:

use A;   
class ATest extends PHPUnit_Framework_TestCase{  

    public function testGetSum{  
        $arg1Mock = $this->getMock('classB'); //use fully qualified class name
        $arg2Mock = $this->getMockBuilder('classC')
            ->disableOriginalConstructor()
            ->getMock(); //use mock builder in case classC constructor requires additional arguments
        $a = new A($arg1Mock, $arg2Mock);
        $this->assertEquals(3, $a->getSum(1,2));  
    }  
}  

注意:如果您不会在这里使用模拟,而是使用真正的 classB 和 classC 实例,那么它将不再是单元测试 - 这将是一个功能测试

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对构造函数带有一些参数的类的方法进行单元测试? 的相关文章

随机推荐