6

是否可以使用 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;
    }
}

你们中有人知道我怎样才能让这种行为正常工作吗?

谢谢!

4

1 回答 1

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

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

于 2013-08-06T13:31:45.580 回答