在PHPUnit中为模拟添加常量

Thi*_*ico 6 phpunit unit-testing const mocking

是否可以使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

你们中的任何人都知道我怎么能让这种行为起作用?

谢谢!

Muf*_*Man 2

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

在你的测试文件中

<?php

class SomeClass {
    const FOOBAR = 'foobar';
}

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

// tests

?>
Run Code Online (Sandbox Code Playgroud)

然后,您使用模拟对象来实现模拟功能,并以与最初相同的方式使用类常量。例如:

// 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;
Run Code Online (Sandbox Code Playgroud)

这很脏,所以我确信如果您使用某种尝试加载实际SomeClass类的自动加载,事情可能会变得非常混乱,但如果您不加载原始的SomeClass.

我绝对有兴趣听到其他解决方案,并获得一些关于这到底有多脏的反馈。