【问题标题】:Alias mock persists over test classes别名模拟在测试类上持续存在
【发布时间】:2016-05-05 15:13:33
【问题描述】:

我在 A 类中使用 Mockery 创建了一个别名模拟,以模拟对我要测试的类中的一些公共静态方法的调用。

在不同的测试类 B 中,我想使用这些公共静态方法(未模拟),但似乎在测试类 A 中创建的别名模拟在执行测试类 B 时仍然存在。在测试类 B 中运行测试时,我收到此异常:BadMethodCallException: Static method Helper::formatDate() does not exist on this mock object,即使不应在 B 类中模拟 Helper 类。

我已尝试添加:

/**
 * @runTestsInSeparateProcesses
 * @preserveGlobalState disabled
 */

在测试类中使它们单独运行,但随后出现此错误:

PHPUnit_Framework_Exception: PHP Fatal error: Class 'TestCase' not found

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: php laravel laravel-4 phpunit mockery


    【解决方案1】:

    尝试使用 AspectMock,它应该模拟静态方法:https://github.com/Codeception/AspectMock

    无论如何,这个问题表明您的代码不可测试。您应该考虑重构它,而不是使用需要模拟的静态调用。

    【讨论】:

    • 感谢您的回答@gontrollez。使用 Mockery 还可以模拟静态方法,我真的不想更改模拟框架,因为我已经有很多使用 Mockery 的单元测试。 Mockery 也集成到我正在使用的框架中。我也许可以重构我的代码,但 Laravel 默认使用了相当多的静态方法调用。
    • 是的,我明白了。我没有在实际项目中使用过 Laravel,所以我无法确定,但我很确定一定有一种方法可以完全测试用 Laravel 开发的代码。尝试就此提出与 Laravel 相关的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 2017-09-06
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多