我正在努力对商店系统的一个模块进行单元测试。该商店系统使用静态方法,我必须在要测试的函数中调用这些方法。
public function toTest() {
$value = \Context::getData();
return $value;
}
现在我该如何对该函数进行单元测试并模拟这个静态调用呢?我尝试使用AspectMock,但失败了,因为它显然需要访问原始的\Context类,而这是不可能的,因为它是一个外部系统。我还尝试使用class_alias创建自己的Context类,但也失败了,因为我需要根据正在测试的函数不同而产生不同的Context输出。对于不同的测试多次设置class_alias也行不通,因为相同的类不能被多次声明,而且@runTestsInSeparateProcesses没有预期的效果。
编辑:提供的所有重复内容都没有解决我的问题,因此我认为这不是重复内容。由于无法访问商店系统代码,尤其是像这样难以维护的代码,PHP并不容易进行单元测试。此外,我找到的解决方案应该可以帮助其他具有类似设置的人。
getData()
方法。 - jeroen\Context::getData()
的调用移动到一个单独的私有方法中(几乎就像你现在所做的那样...),以便您可以轻松地模拟该新方法来测试您的toTest()
方法。 - jeroen