Test it! Unit , mocking and in-container Meet Arquillian !

31
Test it! Unit, mocking and in- container Meet Arquillian! Ivan St. Ivanov

description

Test it! Unit , mocking and in-container Meet Arquillian !. Ivan St. Ivanov. Agenda. Introduction to testing Pure unit testing with JUnit Stubs and mocks. Mockito library In-container testing with Arquillian. Characteristics. Fast Run anywhere IDE Build tool CI server - PowerPoint PPT Presentation

Transcript of Test it! Unit , mocking and in-container Meet Arquillian !

Page 1: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Test it! Unit, mocking and in-

container Meet Arquillian!

Ivan St. Ivanov

Page 2: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

AgendaIntroduction to testingPure unit testing with JUnitStubs and mocks. Mockito libraryIn-container testing with

Arquillian

Page 3: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 4: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 5: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 6: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 7: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 8: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

CharacteristicsFastRun anywhere

◦IDE◦Build tool◦CI server

RepeatableLeverage known tooling

Page 9: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

LevelsUnitFunctionalIntegrationAcceptance

Page 10: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Unit testingSingle unit of codeIn isolationBenefits:

◦Quick feedback◦Facilitate change◦Document features

Limitations◦Won’t catch integration errors◦Too much mocking

Page 11: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

“ The purpose of automated

testing is to enable change. Verifying correctness is just a nice side effect.

- Jeremy Norris

Page 12: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Test frameworks

Page 13: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Introduction to JUnitNo need to extend framework

classesAnnotate test methods with

@TestPreparation methods with

@Before and @BeforeClassCleanup activities with @After

and @AfterClassCheck with Assert methodsExtensible with test runners

Page 14: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Example JUnit test casepublic class FooBarTest {

private Foo foo;

@Before public void setup() { foo = new Foo(); foo.init(); }

@Test public void testBar() throws Exception { Assert.assertEquals("bar", foo.getBar()); }

@After public void tearDown() { foo.cleanup(); }}

Page 15: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 16: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Stubs and mocksUnits are not isolatedStubs

◦Test doubles◦Predetermined behavior

Mocks◦Validate behavior as well

Unit under test implies dependency injection

Page 17: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Dependency injectabilitySample usecase

◦Conference manager◦Cache

Wrong:◦Create Cache inside Conference

manager◦Lookup Cache

Correct◦Constructor or setter injection

Page 18: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Mocking libraries

Page 19: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 20: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Greeting earthlings

Page 21: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Core principlesTests should be portable to any

containerTests should be executable from

both IDE and build toolThe platform should extend

existing test frameworks

Page 22: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Step 1 – pick a containerContainer extensions

◦JBoss, Tomcat, Weld, Glassfish, Jetty, WebSphere, WebLogic

Page 23: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Step 2 – connect the container

Container types◦Embedded ◦Remote◦Managed

Page 24: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Step 3 – package and deployShrinkWrap library

◦Deployment◦Resolve from Maven◦Create descriptors

Page 25: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Step 4 – run the testTests runs in-container

◦CDI, EJB, JNDI available◦No need to mock most of the

servicesPresent the result as a normal

unit test

Page 26: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

Step 5 – undeploy the testUndeploy the test archiveDisconnect or stop the container

Page 27: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 28: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

That’s not allPersistence extensionWarpDroneGrapheneAngularJS, Android, OSGi…

Page 29: Test it!  Unit , mocking and  in-container  Meet  Arquillian !
Page 31: Test it!  Unit , mocking and  in-container  Meet  Arquillian !

About this demoSlideshttp://bit.ly/bgjug-testing-slides Showcase – initialhttp://bit.ly/bgjug-testing Showcase – finalhttp://bit.ly/bgjug-testing-final