如何使用不存在的回调类作为参数测试函数


How to test function with nonexist callback class as parameter

>我有以下问题。我为我们的网站做API,客户必须使用他的函数作为我的函数中的回调。

例:

UserClass { 
    userMethod() {
        return $data;
    }
}
MyClass {
    myFunction (callback ) {
        doingSomething();
        doingSomething();
        $data = call_user_function($callback);
        return doingSomethingWithData($data);
    }
}

问题是,这是 API,我无法将客户类实现为回调,因为不存在,但我需要测试该函数将使用预期数据。有没有可能如何使用phpunit测试我的函数?

多谢

只需传入匿名函数,该函数返回可以预测输出的预期结果。确保它正确处理垃圾数据输出/边缘情况。您的测试可能如下所示:

class MyClassTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider myFunctionProvider
     */
    public function testMyFunction($callback, $expected)
    {
        $this->assertEquals(
            // Just as example you can create instance of class and call it.
            MyClass::MyFunction($callback),
            $expected
        );
    }
    public function myFunctionProvider()
    {
        return [
            [ function () { return 'a';}, 'a'],
            [ function () { return 'c';}, 'c'],
            [ function () { return 'b';}, 'b']
        ];
    }
}

作为旁注,将您的代码更改为:

function MyFunc(callable $callback) {
}

这将确保你只能调用你的函数。