2017-10-07 46 views
0

我正在使用Symfony框架的guard component開發phpcas包。我的包正在工作,但我想做一些單元測試。我想測試我的CasAuthenticator。 PhpCAS library正在使用靜態方法。所以我決定用Mock Aspect來嘲笑它。我在模擬方面配置中錯過了什麼?

我配置了看點,但我仍然有一個錯誤。

這是一個正在運行但失敗的簡化測試。

Screenshot of the failing test

預計PhpCAS :: setDebug被調用,但它從未發生過。得到:

C:\ wamp64 \ WWW \ casguard \ casguard \廠商\ codeception \縱橫模擬\ SRC \ AspectMock \代理\ Verifier.php:64

C:\ wamp64 \ WWW \ casguard \ casguard \測試\ SimpleTest.php:32

//root_dir/Tests/SimpleTest.php 
namespace AlexandreT\Bundle\CasGuardBundle\Tests; 

use PHPUnit\Framework\TestCase; 
use AspectMock\Test as test; 
use PhpCAS; 

class SimpleTest extends TestCase 
{ 
    public function testAspectMock() 
    { 
     $phpCas = test::double('PhpCAS', ['setDebug' => function() { 
      echo 'YES I CALL THE MOCKED Debug function'; 
     }]); 
     PhpCAS::setDebug(); 
     $phpCas->verifyInvoked('setDebug', false); 
    } 

    protected function tearDown() 
    { 
     parent::tearDown(); 
     test::clean(); 
    } 
} 

輸出不包含YES我CALL嘲笑調試功能,所以我認爲PhpCAS不受看點嘲笑。

我仔細看了this documentation和我配置我的引導文件是這樣的:

//root_dir/Tests/bootstrap.php 
include __DIR__.'/../vendor/autoload.php'; // composer autoload 

$kernel = \AspectMock\Kernel::getInstance(); 
$kernel->init([ 
    'debug' => true, 
    'includePaths' => [ 
     __DIR__.'/../vendor/jasig/phpcas', 
    ], 
]); 

正如你可以看到,我增加了供應商目錄,其中Cas.php聲明PhpCAS類。但它不會改變任何事情。我做了一些測試:bootstrap.php文件由phpunit加載。

我在模擬方面配置中錯過了什麼?

回答

0

我添加了一行來配置緩存目錄中我bootstrap.php文件 ,我可以看到Cas.php良好列入。

但我仍然有錯誤。當我探索緩存文件時,我發現phpcas庫不遵守PSR0約定。 phpCAS類的第一個字母不是大寫。

所以我編輯我的測試:

public function testAspectMock() 
{ 
    //$phpCas = test::double('PhpCAS', ['setDebug' => function() { 
    //      ^
    //      | 
    //      v 
     $phpCas = test::double('phpCAS', ['setDebug' => function() { 
     echo 'YES I CALL THE MOCKED Debug function'; 
    }]); 
    phpCAS::setDebug(); //phpCAS instead of PhpCAS 
    $phpCas->verifyInvoked('setDebug', false); 
    //And I had an assertion else test is marked as risky. 
    self::expectOutputString('YES I CALL THE MOCKED Debug function'); 
} 

2個字母... 2天的調試...... #Grrrr