Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing CodeIgniter上的SimpleTester出现故障,出现“故障”;类别';分组测试';“未找到”;_Unit Testing_Codeigniter_Simpletest - Fatal编程技术网

Unit testing CodeIgniter上的SimpleTester出现故障,出现“故障”;类别';分组测试';“未找到”;

Unit testing CodeIgniter上的SimpleTester出现故障,出现“故障”;类别';分组测试';“未找到”;,unit-testing,codeigniter,simpletest,Unit Testing,Codeigniter,Simpletest,我正在尝试在新的CodeIgniter应用程序上干净地安装SimpleTester,如下所示: 在第6步之前,一切都很好,我将“simpletester”添加到自动加载的库列表中。一旦我这样做,访问任何页面只会导致: 致命错误:在中找不到类“GroupTest” /第84行的path/to/app/application/libraries/simpletester.php 浏览GroupTest的代码时,我只在注释和自述文件中看到它,其中说明了以下内容: GroupTest已重命名为TestS

我正在尝试在新的CodeIgniter应用程序上干净地安装SimpleTester,如下所示:

在第6步之前,一切都很好,我将“simpletester”添加到自动加载的库列表中。一旦我这样做,访问任何页面只会导致:

致命错误:在中找不到类“GroupTest” /第84行的path/to/app/application/libraries/simpletester.php

浏览GroupTest的代码时,我只在注释和自述文件中看到它,其中说明了以下内容:

GroupTest已重命名为TestSuite(见下文)。 在1.1中完全删除了它,以支持这一点 名字

我试图修改第84行以用TestSuite替换GroupTest,但随后出现以下错误:

致命错误:在中调用未定义的方法TestSuite::addTestFile() /home/path/to/app/application/libraries/simpletester.php 在线96


这是他们这边的错误吗?以前有人见过吗?

我也遇到过同样的问题。GroupTest类可以在SimpleTest 1.0.1版的test_case.php中找到:

不幸的是,仅仅将v1.0.1插入libraries文件夹并不能解决世界上所有的问题。我不再收到“致命错误:类'GroupTest'未找到…”错误,但我确实收到了分段错误,我的站点不再工作

我曾短暂地试图追查这个问题,但无济于事


注意:我也在上回复了。

我在当前项目中遇到了相同的问题,发现问题在于GroupTest被TestSuite所取代,而TestSuite的工作方式略有不同

这是我使用的库代码:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

$libraryDir = APPPATH . 'libraries/simpletest';

if(!is_dir($libraryDir))
    exit("Simpletest must be located in \"$libraryDir\"");

require_once $libraryDir . '/unit_tester.php';
require_once $libraryDir . '/mock_objects.php';
require_once $libraryDir . '/collector.php';

class SimpleTester
{
    /**
    * What reporter should be used for display.
    * Could be either HtmlReporter, SmallReporter, MinimalReporter or ShowPasses.
    */
    public $Reporter = 'MinimalReporter';

    private $testDir;
    private $testTitle;
    private $fileExtension;

    public function __construct($params = false)
    {
        $ci =& get_instance();

        $ci->config->load('simpletester');

        if($params == false) {
            $params['runFromIPs'] = $ci->config->item('runFromIPs');
            $params['testDir'] = $ci->config->item('testDir');
            $params['fileExtension'] = $ci->config->item('fileExtension');
            $params['autorun'] = $ci->config->item('autorun');
            $params['reporter'] = $ci->config->item('reporter');
            $params['testTitle'] = $ci->config->item('testTitle');
        }

        if(isset($params['runFromIPs']) && strpos($params['runFromIPs'], $ci->input->server('SERVER_ADDR') === FALSE))
        {
            // Tests won't be run automatically from this IP.
            $params['autorun'] = FALSE;
        }

        // Check if call was an AJAX call. No point in running test
        // if not seen and may break the call.
        $header = 'CONTENT_TYPE';
        if(!empty($_SERVER[$header])) {
            // @todo Content types could be placed in config.
            $ajaxContentTypes = array('application/x-www-form-urlencoded', 'multipart/form-data');
            foreach ($ajaxContentTypes as $ajaxContentType) {
                if(false !== stripos($_SERVER[$header], $ajaxContentType))
                {
                    $params['autorun'] = FALSE;
                    break;
                }
            }
        }

        $this->testDir = $params['testDir'];
        $this->testTitle = $params['testTitle'];
        $this->fileExtension = $params['fileExtension'];

        if(isset($params['reporter']))
            $this->Reporter = $params['reporter'];

        if($params['autorun'] == TRUE)
            echo $this->Run();
    }

    /**
    * Run the tests, returning the reporter output.
    */
    public function Run()
    {
        // Save superglobals that might be tested.
        if(isset($_SESSION)) $oldsession = $_SESSION;
        $oldrequest = $_REQUEST;
        $oldpost = $_POST;
        $oldget = $_GET;
        $oldfiles = $_FILES;
        $oldcookie = $_COOKIE;

        $test_suite = new TestSuite($this->testTitle);

        // Add files in tests_dir
        if(is_dir($this->testDir))
        {
            if($dh = opendir($this->testDir))
            {
                while(($file = readdir($dh)) !== FALSE)
                {
                    // Test if file ends with php, then include it.
                    if(substr($file, -(strlen($this->fileExtension)+1)) == '.' . $this->fileExtension)
                    {
                        $test_suite->addFile($this->testDir . "/$file");
                    }
                }
                closedir($dh);
            }
        }

        // Start the tests
        ob_start();
        $test_suite->run(new $this->Reporter);
        $output_buffer = ob_get_clean();

        // Restore superglobals
        if(isset($oldsession)) $_SESSION = $oldsession;
        $_REQUEST = $oldrequest;
        $_POST = $oldpost;
        $_GET = $oldget;
        $_FILES = $oldfiles;
        $_COOKIE = $oldcookie;

        return $output_buffer;
    }
}

// Html output reporter classes //////////////////////////////////////

/**
* Display passes
*/
class ShowPasses extends HtmlReporter
{
    function ShowPasses()
    {
        $this->HtmlReporter();
    }

    function paintPass($message)
    {
        parent::paintPass($message);
        print "<span class=\"pass\">Pass</span>: ";
        $breadcrumb = $this->getTestList();
        array_shift($breadcrumb);
        print implode("-&gt;", $breadcrumb);
        print "-&gt;$message<br />\n";
    }

    function _getCss()
    {
        return parent::_getCss() . ' .pass {color:green;}';
    }
}

/**
* Displays a tiny div in upper right corner when ok
*/
class SmallReporter extends HtmlReporter
{
    var $test_name;

    function ShowPasses()
    {
        $this->HtmlReporter();
    }

    function paintHeader($test_name)
    {
        $this->test_name = $test_name;
    }

    function paintFooter($test_name)
    {
        if($this->getFailCount() + $this->getExceptionCount() == 0)
        {
            $text = $this->getPassCount() . " tests ok";
            print "<div style=\"background-color:#F5FFA8; text-align:center; right:10px; top:30px; border:2px solid green; z-index:10; position:absolute;\">$text</div>";
        }
        else
        {
            parent::paintFooter($test_name);
            print "</div>";
        }
    }

    function paintFail($message)
    {
        static $header = FALSE;
        if(!$header)
        {
            $this->newPaintHeader();
            $header = TRUE;
        }
        parent::paintFail($message);
    }

    function newPaintHeader()
    {
        $this->sendNoCacheHeaders();
        print "<style type=\"text/css\">\n";
        print $this->_getCss() . "\n";
        print "</style>\n";
        print "<h1 style=\"background-color:red; color:white;\">$this->test_name</h1>\n";
        print "<div style=\"background-color:#FBFBF0;\">";
        flush();
    }
}

/**
* Minimal only displays on error
*/
class MinimalReporter extends SmallReporter
{
    function paintFooter($test_name)
    {
        if($this->getFailCount() + $this->getExceptionCount() != 0)
        {
            parent::paintFooter($test_name);
            print "</div>";
        }
    }
}
我的配置文件是:

$config['testDir'] = APPPATH . 'tests';
$config['runFromIPs'] = '127.0.0.1';
$config['reporter'] = 'HtmlReporter';
$config['autorun'] = false;
$config['fileExtension'] = 'php';
$config['testTitle'] = 'My Unit Tests';

谢谢你的深入回答!我到家后再试试,寄回来。
$config['testDir'] = APPPATH . 'tests';
$config['runFromIPs'] = '127.0.0.1';
$config['reporter'] = 'HtmlReporter';
$config['autorun'] = false;
$config['fileExtension'] = 'php';
$config['testTitle'] = 'My Unit Tests';