一般的fixture通常回傳靜態的資料,但當測試需要動態生成資料,或根據測試參數生成不同的結果時,就需要用到工廠型 (Factories as Fixtures)。Factories as Fixtures的核心概念是讓fixture回傳一個可呼叫的函式,這樣測試函式就可以多次呼叫這個函式,並動態地生成所需的資料。這種模式適合以下情境:
- 資料需要根據輸入參數動態生成:根據測試函式提供的參數生成不同類型的集合
- 同一測試中需要多次生成資料:在同一測試中重複呼叫fixture生成不同的內容
- 測試的結果依賴於測試函式提供的參數:根據測試函式傳遞的不同參數,回傳不同的結果
範例
以下是一個使用pytest的範例,我們將定義一個能回傳不同集合的Factories as Fixtures。
@pytest.fixturedef setup05(): #定義一個fixture,能提供不同類型的集合def get_structure(name): #定義一個內部函式,根據傳入的名稱回傳不同的集合if name == 'list':return [1, 2, 3]elif name == 'tuple':return (1, 2, 3)return get_structure
get_structure會根據傳入的name參數,回傳對應的集合:如果name是 'list',則回傳一個列表;如果是 'tuple',則回傳一個元組。
setup05('list')會呼叫get_structure函式,並傳入'list'作為參數,因此它應該回傳一個列表 [1, 2, 3]。接著,我們使用assert來檢查返回的結果是否為list類型,tuple部分也是一樣過程。#測試函式def test_fact_fixture(setup05):assert type(setup05('list')) == listassert type(setup05('tuple')) == tuple
沒有留言:
張貼留言