PHP - Simpletest - 如何测试“包含” 类

PHP - Simpletest - How to test “included” classes

问题

我正在尝试为 Wordpress 插件的代码更改编写测试。

<?php
require_once('.\simpletest\autorun.php');
require_once('.\wp-content\plugins\appointment-booking\includes.php'); 
// The line above causes [No runnable test cases in...] problem. 
// In my actual code, I have absolute path and I've made sure that the path is correct.

class test extends UnitTestCase 
{
 function test_pass()
 {
    $this->assertFalse(false);
 }
}
?>

请帮助我了解原因和解决方法。 如评论中所述,第二个 require_once 导致错误 [No 运行nable test cases in...]

例如:

Bad TestSuite [test.php] with error [No runnable test cases in [test.php]]

我希望不会看到 Bad TestSuite 错误。我希望它能够 运行 测试,就像第二个 require_once 被注释掉时它可以做的那样。

我看到这里描述的确切问题:PHP - Simpletest - How to test "included" classes,但我不明白这个问题,或者如何解决。谢谢。

2016 年 3 月 25 日回答

由于我无法将此问题从 "on-hold" 状态中删除,并且无法找到回答问题的方法。我在这里写解决方案。

get_home_path() 文森特的回答帮助我找到了原因,所以我将其标记为答案,尽管从技术上讲这不是真的。当我试图在我的代码中使用它时,我不能 - 函数名称和 ABSPATH 等未定义。原因是它不被认为是 WordPress 的一部分。

进一步搜索发现 调试看到我想包含的WordPress文件有这段代码

<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

因此,这就是为什么当 require 函数是 运行 时,它停止了一切,没有找到任何测试。要修复,请添加

require( dirname( __FILE__ ) . '/wp-blog-header.php' ); 

而不是第二个 require_once 和 ABSPATH 将被正确设置,我可以使用 WordPress API 和插件的代码并编写测试用例。

使用绝对路径很危险。您可以使用:

require_once(get_home_path() .'wp-content\plugins\appointment-booking\includes.php');

(如果你在Windows环境中)