我有一个类似这样的表单类:
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时,它会抛出一些错误,如:
缺少\..\::\ \u construct()的参数1,在/./A.php的第5行调用
即使我提供参数,它也会在不同的文件中抛出相同的错误
然后,我得到了类B的构造函数相同的错误(类B的构造函数具有与A相似的形式)。
第10行的/./B.php中调用的\..\::\ \uu construct()缺少参数1
有没有其他方法,我可以测试功能或我缺少的东西。
我不想使用mock(getMockBuilder(),setMethods(),getMock())进行测试,因为它似乎违背了单元测试的全部目的。
您可以告诉PHPUnit您想要模拟指定类的哪个方法,方法为set方法
。来自医生:
可以在Mock Builder对象上调用set方法(数组$方法)来指定将被可配置的测试双重替换的方法。其他方法的行为不会改变。如果调用setmethod(null)
,则不会替换任何方法。
因此,您可以在不替换任何方法的情况下构造您的类,但可以绕过如下构造(工作)代码:
public function testGetSum(){
$a = $this->getMockBuilder(A::class)
->setMethods(null)
->disableOriginalConstructor()
->getMock();
$this->assertEquals(3, $a->getSum(1,2));
}
希望这有帮助
单元测试背后的基本思想是测试类/方法本身,而不是该类的依赖关系。为了对classA
进行单元测试,您不应该使用构造函数参数的真实实例,而应该使用mockPHPUnit
提供了一种很好的创建方法,因此:
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));
}
}
注意:如果你在这里不使用mock,而是使用一个真正的类B和类C实例,它将不再是单元测试——它将是一个功能测试
问题内容: 我有一堂课要添加单元测试。该类具有多个构造函数,这些构造函数采用不同的类型并将其转换为规范形式,然后可以将其转换为其他类型。 实际上,它接受并转换为其他两种类型。 我正在尝试找出最合适的方法来测试这些构造函数。 应该有一个针对每个构造函数的测试和输出类型: 这导致许多不同的测试。如您所见,我正在努力命名它们。 应该有多个断言: 这有多个断言,这使我感到不舒服。它还正在测试getStri
Kotlin中的参数与Java中有些不同。如你所见,我们先写参数的名字再写它的类型: fun add(x: Int, y: Int) : Int { return x + y } 我们可以给参数指定一个默认值使得它们变得可选,这是非常有帮助的。这里有一个例子,在Activity中创建了一个函数用来toast一段信息: fun toast(message: String, length: I
问题内容: 这些来自github上的spring amqp示例,位于https://github.com/SpringSource/spring-amqp- samples.git 这些是 什么类型的Java构造函数?它们是吸气剂和吸气剂的捷径吗? 与此相反 问题答案: 这些构造函数被重载以使用调用另一个构造函数。第一个无参数构造函数使用空参数调用第二个。第二呼叫的第三构造(未示出),其必须采取,
如果我有一个带有@PostConstruct方法的类,如何使用 JUnit 和 Spring 测试它的构造函数和它的@PostConstruct方法?我不能简单地使用新的 ClassName(param,param),因为这样它就不会使用 Spring -- @PostConstruct 方法不会被触发。 我错过了什么明显的东西吗? 我有一些类似的东西(虽然稍微复杂一点),但是@PostConst