我有一个简单的功能,像这样:

    function CreateFileLink()
    {
            global $Username;

            return date("d-m-y-g-i");
    }


您如何编写代码以测试返回数据可变的函数?

最佳答案

如果可以某种方式控制该date()函数,则可以进行测试。例如,在这种情况下,您只关心使用“ d-m-y-g-i”调用date函数;您实际上并不关心它的输出。也许像:

function CreateFileLink(DateProvider dateProvider)
{
        global $Username;

        return dateProvider.date("d-m-y-g-i");
}


抱歉,我什至不知道这是什么语言,但希望您能明白我的意思。在生产代码中,您可以这样做:

DateProvider standardDateProvider = new DateProvider() { Date date(String str) { return date(str); } };
CreateFileLink(standardDateProvider);


但是在您的测试中,您可以提供一个替代实现,如果输入不是您期望的那样,则会抛出错误:

DateProvider mockProvider = new DateProvider()
{
    Date date(String str)
    {
        if(str != "d-m-y-g-i") throw Exception();
        return "success";
    }
}

10-07 20:33