導航:首頁 > 方法技巧 > Go如何mockinit方法

Go如何mockinit方法

發布時間:2022-06-15 23:29:58

『壹』 如何在phpunit中mock一個單例類

當我們對A類進行單元測試時,A類可能依賴了B類,為了減少依賴,方便A類方法的測試,我們可以模擬一個B類,簡單規定其各方法的返回值(而非真正實現具體邏輯)。Phpunit中提供了一套模擬類的api,簡單使用如下:

[php] view
plainprint?

class StubTest extends PHPUnit_Framework_TestCase

{

public function testStub()

{

// Create a stub for the SomeClass class.

$stub = $this->getMock('SomeClass');

// Configure the stub.

$stub->expects($this->any())

->method('doSomething')

->will($this->returnValue('foo'));

// Calling $stub->doSomething() will now return

// 'foo'.

$this->assertEquals('foo', $stub->doSomething());

}

}
class StubTest extends PHPUnit_Framework_TestCase
{
public function testStub()
{
// Create a stub for the SomeClass class.
$stub = $this->getMock('SomeClass');

// Configure the stub.
$stub->expects($this->any())
->method('doSomething')
->will($this->returnValue('foo'));

// Calling $stub->doSomething() will now return
// 'foo'.
$this->assertEquals('foo', $stub->doSomething());
}
}

在這個例子中,我們得到了一個'SomeClass'的模擬,規定其可以被調用任意次,如果調用doSomething方法,將得到值foo。

問題:
我們知道,對於一個單例類,其constructor方法為private,而getMock的實現,默認是要調用原類的constructor方法。
如果SomeClass為單例,phpunit將會提示
Call to private SomeClass::__construct() from context 'PHPUnit_Framework_TestCase'
這時,我們的測試該如何進行呢?

解決:
仍然使用getMock進行模擬。
只要將其第5個參數設為false即可。其含意是:不調用原對象的構造函數。

[php] view
plainprint?

$stub = $this->getMock('SomeClass', array(), array(), '', false);
$stub = $this->getMock('SomeClass', array(), array(), '', false);

不得不說,這樣使用有點復雜。
如果你使用的是phpunit3.5及以上版本提供了更易用的api,你可以這樣禁掉對原有constructor方法的調用。
$stub=$this->getMockBuilder('SomeClass')->disableOriginalConstructor()->getMock();

附:
對getMock的6個可選參數的詳解,
手冊中並未提及它們的默認值,經測試得到結果如下:
array(), array(), '', false, false, false

$stub=$this->getMockBuilder('SomeClass')
等同於:
$stub=$this->getMockBuilder('SomeClass',array(), array(), '', true, false, false)

『貳』 如何對子方法中的對象進行mock

在進行對象方法的引用時,方法中參數的個數,參數的數據類型與原方法中定義的要一致,否則編譯器會出錯。注意構造方法後面括弧內帶幾個參數或者不帶參數

『叄』 mock 中如何模擬任意的數組

第一種方法是使用特殊設計的字元參數來模擬數組。
我們可以用 varchar 數據類型來模擬一個數組,數組中的元素用逗號分隔開,接著通過WHILE循環使用CHARINDEX以及SUBSTRING函數來提取其中的元素。
示例代碼如下:
CREATE PROCEDURE sum_of_array @list varchar(1000)
AS
DECLARE @ix int, @pos int, @str varchar(1000), @sum int
SET @pos = 1
SET @ix = 1
SET @sum = 0
WHILE @ix > 0
BEGIN
SET @ix = charindex(',', @list, @pos)
IF @ix > 0
SET @str = substring(@list, @pos, @ix - @pos)
ELSE
SET @str = substring(@list, @pos, len(@list))
SET @str = ltrim(rtrim(@str))
SET @sum = @sum + cast(@str AS int)
SET @pos = @ix + 1
END
SELECT @sum
GO
該示例代碼可以求出一個整型數據數組的和,調用方式為:
EXEC sum_of_array @list = '1,2,3,4,5'
結果為:16。

『肆』 如何mock調用super的方法

據我說知: mock測試方法用於構造對象,而不是你說的方法 比如,你現在要調用資料庫,但這塊也許還沒完成,無法用orm框架進行映射,你就可以先new一些這樣的對象,將它們保存或當作參數傳入等 比如某介面中(UserDao)你有一個方法叫:queryUser(S...

『伍』 如何mock靜態方法

因為Mockito使用繼承的方式實現mock的,用CGLIB生成mock對象代替真實的對象進行執行,為了mock實例的方法,你可以在subclass中覆蓋它,而static方法是不能被子類覆蓋的,所以Mockito不能mock靜態方法。
但PowerMock可以mock靜態方法,因為它直接在bytecode上工作,類似這樣:
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.moles.testng.PowerMockTestCase;
import org.testng.Assert;
import org.testng.annotations.Test;
@PrepareForTest(AbstractAnimal.class)
public class AbstractAnimalTest extends PowerMockTestCase {

『陸』 如何將Spring配置文件已配置的類Mock

只有設置了start-up屬性才會被容器啟動,調用其init方法。如果你不需要容器啟動時調用servlet,就把start-up屬性注掉。spring配置在listener節點中,在容器啟動時會首先初始化spring

閱讀全文

與Go如何mockinit方法相關的資料

熱點內容
質量方法中的現狀能力分析圖叫啥 瀏覽:846
2期梅毒治療方法 瀏覽:303
山菍種植方法 瀏覽:281
說明方法舉例子的術語是什麼 瀏覽:173
建築工程測量課程教學方法 瀏覽:198
小學生學習英語的方法及技巧視頻 瀏覽:359
固定式幕布安裝方法 瀏覽:479
瀝青路面縱裂的解決方法 瀏覽:488
調經需要哪些方法吃哪些葯 瀏覽:540
自建房大門過門石安裝方法 瀏覽:999
手搖式電腦使用方法 瀏覽:864
蘋果6plus的閃光燈在哪裡設置方法 瀏覽:366
我愛這土地運用了哪些論證方法 瀏覽:587
魅族微信聲音怎麼設置在哪裡設置方法 瀏覽:214
抽氣機連接玻璃罩的研究方法 瀏覽:447
治療凍腳的方法 瀏覽:360
女人避孕套使用方法 瀏覽:325
如何優化教育孩子的觀念和方法 瀏覽:410
曹沖稱象用的測量方法是 瀏覽:232
咳嗽流鼻子用什麼方法治 瀏覽:215