+ All Categories
Home > Technology > Seminar Nastroje Jednotk Testovani

Seminar Nastroje Jednotk Testovani

Date post: 14-Dec-2014
Category:
Upload: jakub-holy
View: 1,099 times
Download: 10 times
Share this document with a friend
Description:
[EN] This is in Czech [CZ] Jednotkové testy snadno a rychle dík využití těch správných nástrojů - Mockito, DbUnit, Groovy aj. Opomíjené přínosy testů. Bonus: TDD a mutační testování.
21
© 2010 IBA CZ, s.r.o. 1 Nástroje jednotkového testování seminář IBA CZ Jakub Holý, 4/2010
Transcript

© 2010 IBA CZ, s.r.o.1

Nástroje jednotkového testováníseminář IBA CZ

Jakub Holý, 4/2010

© 2010 IBA CZ, s.r.o.2

Obsah

O čem si povíme... Jednotkové testování pro vývojáře

proč jak nástroje

...a o čem nikoliv Místo jednotkového testování ve vývojovém

cyklu (CI servery apod.)

Jiné typy testování, jako funkční (Selenium aj.) a integrační (až na výjimky)

© 2010 IBA CZ, s.r.o.3

Díl 1: Co a proč?

© 2010 IBA CZ, s.r.o.4

Kvíz

Jaký je nejefektivnější způsob odhalení chyb v kódu?a) Jednotkové testováníb) Testování aplikace testovacím týmemc) Statická analýza kódu – FindBugs ap.d) Jiný?

Odpověď: Revize kódu

© 2010 IBA CZ, s.r.o.5

Kvíz II

Kdo někdy napsal jednotkový test s JUnit či podobnou?

Kdo někdy použil pomocnou knihovnu pro testování ve specifickém prostředí nebo specifické datové struktury? (JSFUnit, XmlUnit, DbUnit, mocky, ...)

Odpověď: Revize kódu

© 2010 IBA CZ, s.r.o.6

Překážky na cestě k testovacímu satori1

Všichni víme, jak jsou testy důležité, ale nikdo to nedělá. Proč?

Není čas (opravdu? šetří později, stojí jen 10%2)

Moc práce

Neví jak

1) Zenový výraz pro stav dokonalého štěstí, volně řečeno2) Viz článek Cost of Testing: http://java.dzone.com/articles/cost-testing

© 2010 IBA CZ, s.r.o.7

Drobné opakování...

© 2010 IBA CZ, s.r.o.8

Proč testovat?

1. Nutí psát testovatelný a tedy lepší kód Koheze: Malé metody/třídy dělající jedinou věc

Loose coupling (↔ DI; setDependency(..) - Google)

Konfigurovatelnost (JDBC URL apod.)

➔ Flexibilní, hezčí, samostatný

2. Včas najdeme chyby – čím dřív, tím levněji Př.: 12 x 24h čas, MobileBackup.LineReader

3. Zlevňuje údržbu ← bezpečný refactoring

© 2010 IBA CZ, s.r.o.9

Typy testování

Testování funkce:

– Vývojář: jednotkové x funkční x scenario (behavior) driven x integrační

– Uživatel: akceptační (FITT, ...)

NFR: výkonové (stress a load)

© 2010 IBA CZ, s.r.o.10

Co a jak testovat

Co testovat?Viz dřívější přednáška Petra Adámka.

očekávané chování

chování při nesplnění předpokladů → vede na:

– explicitní vyjádření předpokladů v kódu

– zajištění, že pokud byly mylné a nebudou tedy splněny, aplikace to včas detekuje a dá srozumitelně vědět → ušetřím hodiny/dny zkoumání nečekaného chování

Jak testovat? Pragmaticky!

Nenechat se zaslepit pravidly – viz The Way of Testuvius [WoT]

Bohužel ne vše lze otestovat

100% pokrytí je nesmysl (gettery ap.?!)

Paretovo pravidlo: posledních 20% je 80% práce

Použít vždy ten pravý nástroj pro daný úkol

© 2010 IBA CZ, s.r.o.11

Díl 2: Usnadňujeme si práci

© 2010 IBA CZ, s.r.o.12

Základy jednotkového testování

Frameworky: JUnit 3.8/4.x (lepší integrace všude) vs. TestNG (mocnější?)

– spouštění testů, výsledky, verifikace hodnot

– JUnit 4: Parametrizované testy

– JUnit 4.4: assertThat a fluent API s Hamcrestem

– prostředí: Java 5 x 1.4 x 1.4 s retroweaverem

O podpoře tvorby a spouštění v IDE ...

Show: Ukázka reálného kódu

– demonstrace užití a přínosu

– testing-seminar-junit/ITaxServiceTest, viz poznámky

Pozn.: Že testy prošly neznamená že vše ok, možná jsou jen nedostatečné!Eclipse: JUnit runner

© 2010 IBA CZ, s.r.o.13

Co se závislostmi? (I)

Simulujeme čili mock-ujeme= „náhrada předprogramovaným simulantem“ Mockito, JMock, EasyMock PowerMock pro E.M./Mockito (statické m.,..) Groovy Gmock AOP

Simul-sestřička

© 2010 IBA CZ, s.r.o.14

Co se závislostmi? (II)

Závislosti na prostředí Databáze: DbUnit (a DbUnitTestSkeleton)

Servlety: Cactus (používá JUnit 3.8.1, prý nefunguje s 4), Spring MockHttpServletRequest

EJB: embeddable OpenEJB, JBoss embedded, EJB 3.1: embedded container

Portlety: ?

Web UI: ?HttpUnit, WebUnit...?, JSFUnit (nad Cactusem :-( ) x JBoss jsf-mock

Závěr: Vždy se podívejte, zda neexistuje pomocná knihovna pro testování ve vašem prostředí.

© 2010 IBA CZ, s.r.o.15

Mockito a proč si je zvolit

Snadnost užití – specifikujte jen co chcete Jinde musíte předem specifikovat povolená volání

Mockuje rozhraní i třídy

Malé, dobře dokumentované, hezké API Portováno i do Javy 1.4 Pokročilé schopnosti

Partial mocks

Spying on real objects

Custom Answer callback

Co vrací: RETURNS_SMART_NULLS, RETURNS_DEEP_STUBS (zřetězení mocků), …

Rozumné výchozí chování & velmi přizpůsobitelný Přečíst FAQ! (omezení, doporučení aj.)

// Ukázka Mockita:l = mock(List.class);

when(l.get(0)). thenReturn(“X“);

assert l.get(0) == “X“;assert l.get(1) == null;

© 2010 IBA CZ, s.r.o.16

DbUnit a DbUnit Test Skeleton

1. DbUnit Před každým testem naplní DB z dat v XML [← Jailer]

2. DbUnit Test Skeleton (dbunit-embeddedderby-parenttest) Přednastaven pro vnořenou Derby DB => netřeba externí

DB; umí ji i vytvořit Načte data z připraveného XML – stačí upravit Užiteční pomocníci

(RowComparator, getDataSource(), ...) Lepší zpracování chyb + rady jak řešit V Central Maven repository

public class MyDerbyDbTest { EmbeddedDbTester testDb = new EmbeddedDbTester(); @Before void setUp() throws Exception { testDb.onSetup();}

@Test public void testIt() throws Exception { new MyTestedClass().storeGeek(1, "Kuba Holy"); testDb.createCheckerForSelect("select ...") .assertRowCount(1) .assertNext(new Object[]{ 1, "Kuba Holy"});}}// + .ddl, data v XML

Kompletní (!) test:

© 2010 IBA CZ, s.r.o.17

Groovy, jazyk testera

Co je Groovy? Skriptovací jazyk, 99% Javy + mnoho navíc Koupil Spring Source (dnes VMWare) Odstraňuje ukecanost, usnadňuje práci, moduly

Pár ukázek “““fakt dlouhý

text“““

Map m = [“klíč“:“hodnota“, …]

def u = new User( name: “Jan“, věk: 18, muž: true)

new File(“s.txt“).eachLine { assertEquals(“line${++cnt}“, it)}

Moduly: GSQL, RE, XML, …

Tvorba a srovnání objektových stromů

spockspecification fwrk

© 2010 IBA CZ, s.r.o.18

Groovy Spock

testing and specification framework for Java and Groovy

beautiful and highly expressive specification language

has a JUnit runner → out-of-the-box IDE integration perfect for data-driven tests plus all the power of Groovy

def "maximum of two numbers"() { expect: Math.max(a, b) == c

where: a | b | c 3 | 7 | 7 5 | 4 | 5 9 | 9 | 9}

spockspecification fwrk

© 2010 IBA CZ, s.r.o.19

Neutříděný seznam nástrojů a knihoven

Spring je velmi silný v testování jednotkovém i integračním (JPA,..): *.mock.jndi|web|portlet

Unitils – integruje DbUnit, JPA, JMock aj. Vychytávky jako reflexivní porovnávač bean.

Testy správnosti vícevláknových aplikací ConcuTest.org (2009, Java 1.4/5; testy dětí) viz notes

IBM ConTest (2009, J.1.4/5; ovlivň. scheduler)

MultithreadedTC (2007, ?; explic. scheduling)

JEE a integrace: JBoss Arquillian NetBeans' Memory Leak Unit Test XmlUnit (porovnává XML) a mnoho dalších … → pravděpodobně už někde

existuje ten nástroj, který potřebujete!

© 2010 IBA CZ, s.r.o.20

Pokročilá témata

Test-Driven Development/Design (TDD) nejdřív test, pak kód, pak design (refactor) doplňuje se s akceptačním TDD zaměřuje pozornost na podstatné x předesignování

Mutační testování (mutation testing) Kontrola kvality testů zavedením chyb do kódu Výzvou odstínění nepodstatných změn

Př: compareTo vrátí -2 místo -1

Výkonově náročné Viz framework Javalanche.org a MuJava Viz Beautiful Testing, O'Reilly 2010, kpt.18: Seeding

Bugs to Find Bugs:Beautiful Mutation Testing (Andreas Zeller, David Schuler)

© 2010 IBA CZ, s.r.o.21

Odkazy

Bibliografie [WoT] The Way of Testuvius:

http://www.agitar.com/downloads/TheWayOfTestivus.pdf

Odkazy z této prezentace: http://bit.ly/jhtstlinks

Rozšiřující zdroje Google Talks by Misko Hevery pniederw.wordpress.com/category/spock-framework

Knihy Martin Fowler: XUnit Test Patterns - Refactoring Test

Code, 2008 - vzory a anti-vzory pro jednotkové testy Lasse Koskela: Test-Driven - Practical TDD and

Acceptance TDD for Java Developers, Manning 2008


Recommended