在PHPUnit中为模拟添加常量

时间:2013-06-05 19:13:41

标签: unit-testing mocking phpunit const

是否可以使用PHPUnit向模拟添加类常量?

这是一个例子:

class SomeTest extends PHPUnit_Framework_TestCase {
    public function setUp() {
        $mock = $this->getMock( 'SomeClass' );
        // Here I'd like to add a constant to $mock; something like
        // $mock::FOOBAR;
    }
}

你们有谁知道我怎么能让这种行为起作用?

THX!

1 个答案:

答案 0 :(得分:2)

这个问题已经有一段时间没有答案,但我遇到了同样的问题。这似乎不可能;然而,至少有一个肮脏的解决方法:

在您的测试文件中

<?php

class SomeClass {
    const FOOBAR = 'foobar';
}

class SomeTest extends PHPUnit_Framework_TestCase {
    public function setUp() {
        $mock = $this->getMock( 'SomeClass' );
    }
}

// tests

?>

然后,您将模拟对象用于模拟功能,并且您使用类常量,就像您原来一样。例如:

// Call a method on mocked object
// (would need to add this method to your mock, of course)
$mock->doSomething();
// Use the constant
$fooBar = SomeClass::FOOBAR;

这很脏,所以如果你使用某种尝试加载实际的SomeClass类的自动加载,我肯定事情会变得非常混乱,但如果你这样做,这将很好用“请勿加载原始SomeClass

我非常有兴趣听到其他解决方案,并获得一些关于这是多么脏的反馈。