WebHU - Programozási kérdések és válaszok

Az osztálymetódusok tesztelése az OMCock segítségével

Kíváncsi vagyok, van-e mód arra, hogy az OCMock segítségével egy osztálymetódus kétszer külön-külön meghívjon, mintha az alkalmazás kétszer futna, de valójában csak egyszer.

Szeretnék tesztelni egy osztálymódszert. A metóduson belüli néhány statikus változó miatt a metódus a meghívást követően folyamatosan megtartja viselkedését. Így nem tudok egyszerre különböző viselkedéseket tesztelni.

És persze mást nem tudok hozzátenni az órához, ha csak tesztelés a cél.

01.07.2013

  • A legújabb verziónak nem kellene ezt támogatnia? 01.07.2013
  • Ó, a cím nagyon félrevezető, megváltoztatom. 01.07.2013
  • Szeretnék tesztelni egy osztálymetódust, nem kigúnyolni. Valójában ki kell gúnyolnom a módszer többi részét, hogy tesztelhessem. De a változás az, hogy a statikus változókat a metódusban csak egyszer lehet beállítani. Szóval kíváncsi vagyok, hogy van-e mód egy osztálymetódus kétszer külön meghívására, mint az alkalmazás kétszer, de valójában csak egyszer. 01.07.2013

Válaszok:


1

Nincs mód a statikusan deklarált változók megváltoztatására az OCMock segítségével anélkül, hogy azokat Objective-C metódusokkal ne tárnánk fel. Azt mondod, hogy "természetesen", csak tesztelés céljából nem adhatsz hozzá semmit az osztályhoz, de ez nem általánosan elfogadott. Van egy egész iskola, amely úgy gondolja, hogy magát a kódot úgy kell megtervezni, hogy tesztelhető legyen.

- (NSInteger)someStatic
{
    static NSInteger _someStatic = 42;
    return _someStatic;
}

Ha egy ilyen mintát használtál (például lehetnek jobbak), megcsúfolhatod a statikusságodat. Bár ez módszerhívást ad mindenhol, ahol a statikát használják, fontosabb lehet az átfogó tesztelés.

01.07.2013

2

Az OCMock 2.1-es verziója támogatja a gúnyos osztálymetódusokat:

Megjelent az OCMock 2.1

15 March 2013

Új kiadás (2.1), amely támogatja a stubing osztály metódusait, és számos hibajavítást tartalmaz. Ez a kiadás kompatibilis az Xcode 4.5/4.6-tal.

Webhelyük "Features" oldala néhány példát mutat az osztálymetódusok kigúnyolására:

Osztálymódszerek

[[[mock stub] andReturn:aValue] someClassMethod]

Megmondja a hamis objektumnak, hogy amikor valamilyenClassMethod meghívásra kerül azon az osztályon, amelyhez a hamis objektumot létrehozták, akkor aValuet kell visszaadnia. Ez ugyanaz a szintaxis, mint a csonkpéldány metódusok esetében.

Azokban az esetekben, amikor egy osztálymetódusnak stubba kell lennie, de az osztálynak van egy példánymetódusa is, amelynek neve megegyezik az osztály metódusával, akkor az osztálymetódus gúnyolásának szándékát kifejezni kell:

[[[[mock stub] classMethod] andReturn:aValue] aMethod]

Az osztály visszaállítható eredeti állapotába, azaz minden csonk eltávolításra kerül:

[mock stopMocking]

Erre csak akkor van szükség, ha a teszt vége előtt vissza kell állítani az eredeti állapotot. A gúny automatikusan stopMocking-ot hív a saját felosztása során. Megjegyzés: Ha a csonkolt osztálymetódusokat hozzáadó álobjektum nincs felszabadítva, akkor a csonkolt metódus a tesztek során is megmarad. Ha több álobjektum egyidejűleg manipulálja ugyanazt az osztályt, a viselkedés nem definiálható.

01.07.2013
  • Elolvastam, de nem az, amit keresek. Lehet, hogy a cím félrevezető. Megfontolok egy újat. 01.07.2013
  • @BingchenYang Akkor talán részletesebb kérdést kellene feltenned. Pontosan mire használod a gúnyt? Csonkok? Elvárja? Elutasítja? Mi nem működik? 01.07.2013
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..