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

Kell-e Mockito reflexiót használnia, ha priváttá teszem a Mock értékeket?

Tegyük fel, hogy van egy tesztórám néhány gúnnyal. Lint azt sugallja, hogy a mezők lehetnek privátak. Érdeklődnék, hogy van-e probléma a priváttá tételükkel? Egyik kollégám úgy gondolja, hogy talán Mockito reflexiót fog használni. Igaz ez, vagy nyugodtan megjelölhetem őket privátként?

@Mock private Context context;

vs

@Mock Context context;

A hivatalos Android-dokumentáció a Kotlin-verzión magánjellegű, a Java-verzión azonban nem (a kérdés írásakor). https://developer.android.com/training/testing/unit-testing/local-unit-tests#kotlin

Körülnéztem, és Google-t kerestem, de nem vagyok benne biztos, mert sehol nincs kifejezetten megemlítve, és néhány hivatkozás privát, míg mások nem.

A tesztek mindkét esetben jól futnak, és körülbelül ugyanannyi időt vesznek igénybe (10 másodperc). Ezért szerintem jobb, ha privátként jelölöd meg, és eltávolítod a szöszhibát. Mi lehet a hátránya?

Amennyire meg tudom ítélni, a reflexiónak semmi köze ahhoz, hogy az érték privát-e vagy sem. Úgy tűnik, ez inkább arról szól, hogy látja-e a metódusokat az álosztályon belül. Ha ezek a metódusok az osztályon belül privátak, akkor reflexiót kell használnia.

31.12.2018

  • stackoverflow.com/a/51499019/4265739 31.12.2018
  • Kösz. Valójában már megnéztem azt a bejegyzést, és azt hiszem, a személy osztályon belüli privát mezőkre utalnak. Nem az ember gúnyolja magát. Arról beszélek, hogy a privát értéket a tesztosztály tényleges álértékére állítom be (nem a gúnyolt objektumra). 31.12.2018

Válaszok:


1

A mezőket priváttá teheti, ha akarja, a tükrözés használhatja a privát mezőket is.

Én személy szerint a bevált gyakorlatokon gondolkodnék, és szükség esetén a változókat privátként használnám getter és setter módszerekkel.

31.12.2018
  • Nem hiszem, hogy jó ötlet lenne gettereket és settereket használni egy tesztosztályban; az feleslegesen bonyolult lenne. Egyetértek azzal, hogy privátnak kell lenniük, de szeretnék némi megerősítést. Például. ha van valahol valami dokumentációd, hivatkozhatsz, ami legalább közvetetten megerősíti. 31.12.2018

  • 2

    A tükrözésre vonatkozó „korlátozás” az Androidban csak az alkalmazásban lévő eszközön futó kódra vonatkozik. Az egységteszteknek nem kell ezt az elvet követniük, mivel számítógépen futnak, és nem jelennek meg az alkalmazásban.

    Mindig magántulajdonokat használok a tesztóráimban, és soha nem ütköztem semmilyen problémába.

    Frissítés: A forráskód úgy tűnik, hogy a Mockito reflexiót használ a @mock tulajdonságok példányosítására, függetlenül attól, hogy azok privát vagy nyilvánosak.

    31.12.2018
  • Egyetértek azzal, hogy privátnak kell lenniük, de a másik válaszhoz fűzött megjegyzésemhez hasonlóan megerősítést kértem. Például. ha van valahol valami dokumentációd, hivatkozhatsz, ami legalább közvetetten megerősíti. Szintén nem ütköztem problémába vele (kivéve ezt a furcsa megjegyzést a PR-omhoz, amikor priváttá tettem őket). 31.12.2018
  • Ú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..