0
我工作的單元測試,並試圖取代的一類函數被調用別的地方,我的單元測試返回值。如何使課堂任何呼叫::功能得到莫克::功能響應
我開始Mock
對象,這似乎是對我的解決方案工作。 這裏是我使用的代碼:
<?php
namespace A;
class SomeClass
{
public function doSomething()
{
return 20;
}
}
/**
* @group DaTest
*/
class DaTest extends \PHPUnit_Framework_TestCase
{
public function testStub()
{
// Create a stub for the SomeClass class.
$stub = $this
->getMock('A\SomeClass', array('doSomething'))
;
// Configure the stub.
$stub
->expects($this->any())
->method('doSomething')
->willReturn(1)
;
$a = new SomeClass();
var_dump($stub->doSomething)); // Return 1
var_dump($a->doSomething()); // Return 20 -.-'
}
}
正如你看到的,我覺得我被迫使用模擬得到「1」返回。 但我的目標是使SomeClass
的任何實例返回1,但僅用於我的單元測試。
我錯過了什麼? 有關我如何實現這一點的任何想法?
Thx。
編輯: 爲準確顯示什麼,我試圖做我有另外一個代碼是:
<?php
namespace A;
class SomeClass2
{
public function showSomething()
{
$class = new SomeClass();
// Here print 20, I want it to print 1 in my unit test
echo $class->doSomething();
}
}
所有我想要的是讓SomeClass2::showSomething()
打印1在我的單元測試和20時,我把它叫做在非測試環境=)
如果你想防止功能的原始行爲,你做的一切權利 –
嗯,我想'''$ A-> DoSomething的()'''回報「 1「,因爲在我的情況下,我想要」覆蓋「的函數不是直接在我的測試中調用,而是在某些函數的代碼中進行測試調用,所以我不能發送它的模擬。 – LordWeedlle
明白了,您要測試的功能可能無法正確寫入。讓我們更接近您的原始代碼。那麼它會更容易地幫助你 –