如何让 PHPUnit 替换我的测试方法中的类?

发布于 2024-10-11 12:08:03 字数 480 浏览 1 评论 0原文

我有一堂课我想测试。代码如下:

class MyClass
{
    function functionToTest() {

        $class = new Example();

}

在PHPUnit中,我可以使用mocks/stubs来代替Example类吗?

在我的测试方法中:

class MyClassTest extends PHPUnit_Framework_TestCase {

    function testFunctionTest() {
        $testClass = new MyClass();
        $result = $testClass->functionTest();

    }

}

因此,PHPUnit 可以在这里介入并使用模拟来表示“new Example()”,而不是使用实际的“Example”类吗?

I have a class I want to test. Here is the code:

class MyClass
{
    function functionToTest() {

        $class = new Example();

}

In PHPUnit, can I use mocks/stubs to substitute for the Example class?

In my test method:

class MyClassTest extends PHPUnit_Framework_TestCase {

    function testFunctionTest() {
        $testClass = new MyClass();
        $result = $testClass->functionTest();

    }

}

So instead of using the actual "Example" class, can PHPUnit intervene here and use the mock to represent "new Example()" ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笔芯 2024-10-18 12:08:03

最好的解决方案是将 Example 实例注入到 functionToTest() 方法中:

function functionToTest( Example $class )

然后您将能够在单元测试中模拟它:

function testFunctionTest() {
    $testClass = new MyClass();
    $class = $this->getMock( 'Example' );
    $result = $testClass->functionTest( $class );

}

但是如果这种方法适用于由于某些原因不适合您,请尝试使用 test_helpers 扩展提供的 set_new_overload() 函数。请参阅Sebastian Bergmann 的博客了解更多信息。

The best solution would be to inject an Example instance into functionToTest() method:

function functionToTest( Example $class )

Then you'll be able to mock it in your unit tests:

function testFunctionTest() {
    $testClass = new MyClass();
    $class = $this->getMock( 'Example' );
    $result = $testClass->functionTest( $class );

}

But if this approach is for some reason not an option for you, try using set_new_overload() function provided by the test_helpers extensions. See more info in Sebastian Bergmann's blog.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文