2015-04-15 123 views
0

今天我試圖在自己開發的MVC框架中實現PHPUnit。當我嘗試運行我寫的測試用例時,他總是抱怨他不知道類的事實等等。所以我試圖用一堆包含來加載一個幫助文件,然後它給了我一個不同的錯誤。PHPUnit + MVC測試用例

Fatal error: Class 'MysqliDb' not found in /home/ansit-com/workspace/abrechnung/mvc/model/Model.php on line 7 

它位於database.php類中。

我的幫手文件代碼如下所示。

<?php 
include('controllers/Controller.php'); 
include('model/Model.php'); 
include('view/view_class.php'); 
include('view/libs/Smarty.class.php'); 
include('configs/config.inc.php'); 
include('libs/database.php'); 
include('libs/PrefixCache.php'); 
include('libs/helper.php'); 
include('libs/language.php'); 
include('libs/decimal_mark.php'); 
include('libs/validation.php'); 
include ('libs/permissionCheck.php'); 
include('theme/configs/constant.php'); 
?> 

我已經試圖改變路徑,我有以下結構: 項目名稱/控制器 項目名稱/型號 項目名稱/測試(文件,其中我的幫助和所有的測試都)的

結構我的計劃http://imgur.com/IZd5QAv

這是我第一次單元測試工作,在互聯網上,我只找到如何做到這一點在現有框架的例子。 請讓我知道,如果我忘了在這裏提到的東西。

回答

0

好的我解決了這個問題。 我將所有路徑改爲絕對路徑。將所有包含更改爲include_once,因爲我重新聲明瞭某些類,現在它工作正常。

0

你有一個phpunit.xml文件在項目的根?如果是這樣,你可以指定phpunit元素的bootstrap屬性,你可以用你的幫助文件中設置:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.6/phpunit.xsd" 
     bootstrap="bootstrap.php"> 
    <testsuites> 
     <testsuite name="ProjectTestSuite"> 
      <!-- List the folder(s) in which your tests are, here --> 
      <directory suffix=".php">./tests</directory> 

     </testsuite> 
    </testsuites> 
</phpunit> 

有了這個文件,你可以從你的項目root身份運行phpunit,並自動獲取從設置phpunit.xml文件。

也看看https://phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.phpunit更多的配置選項。

+0

我試圖做到這一點,但我仍然得到相同的錯誤,至少當我嘗試從我的終端直接運行。當我嘗試用Eclipse運行它明鉅控制檯運輸發射車我'致命錯誤:類「PHPUnit_Util_Configuration」不/home/users/Schreibtisch/eclipse/plugins/com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510/resources/php發現/vendor/piece/stagehand-testrunner/src/DependencyInjection/PHPUnitConfigurationFactory.php線70' 我已經有這個錯誤,然後可以通過添加'需要「/usr/share/php/PHPUnit/Autoload.php」解決這個問題; '但是如果我現在這樣做,它什麼都不做 – Philippe

+0

我有這樣的感覺,即項目中的include_paths設置不正確。你可以插入一個'echo get_include_path();在錯誤被拋出之前,在代碼的某處退出?應該至少有'。:'。無論哪種方式,你都可以嘗試插入'set_include_path(__ DIR__。':'。get_include_path()'這一行,這可能會有所幫助,那麼你應該可以用'include'relative/path/from/current/。DIR/file.php' – jeromegamez

+0

我這裏得到的回覆是':在/ usr /共享/ PHP:在/ usr /共享/ pear' 我真的不知道是怎麼打出來的是從哪裏遠遠的helper.php或我的工作空間位於 – Philippe