![Page 1: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/1.jpg)
• Version 2.0
Logo auf dunklen Hintergrund (z.B. Website)
Logo auf hellem Hintergrund
Logo in Graustufen
Logo in Schwarz/Weiss
NEEDLEfor Java EE
NEEDLEfor Java EE
NEEDLEfor Java EE
NEEDLEfor Java EE
h-p://needle.spree.de/
Need(le) for Speed – Effec<ve Unit Tes<ng for Java EE
Heinz Wilming, akquinet AG
![Page 2: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/2.jpg)
• Version 2.0 h-p://needle.spree.de/
Mo<va<on
Why do we Test? § Confidence § Cost Reduc<on § Be-er Design § Documenta<on § Less Debug Time
![Page 3: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/3.jpg)
• Version 2.0 h-p://needle.spree.de/
The levels of tes0ng § Unit § Integra<on § Acceptance
Logo auf dunklen Hintergrund (z.B. Website)
Logo auf hellem Hintergrund
Logo in Graustufen
Logo in Schwarz/Weiss
NEEDLEfor Java EE
NEEDLEfor Java EE
NEEDLEfor Java EE
NEEDLEfor Java EE
Unit tes<ng
![Page 4: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/4.jpg)
• Version 2.0 h-p://needle.spree.de/
Run0me environment
Unit tes<ng
![Page 5: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/5.jpg)
• Version 2.0 h-p://needle.spree.de/
Unit-‐Test environment
Unit tes<ng
![Page 6: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/6.jpg)
• Version 2.0 h-p://needle.spree.de/
Unit-‐Test environment
new ShoppingCart();
OrderDao mock = mock(OrderDao.class);
Unit tes<ng
![Page 7: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/7.jpg)
• Version 2.0 h-p://needle.spree.de/
public class ShoppingCart {
@Inject protected OrderDao orderDao;
...
}
Breaking the encapsula0on
Unit tes<ng
![Page 8: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/8.jpg)
• Version 2.0 h-p://needle.spree.de/
public class ShoppingCart {
@Inject private OrderDao orderDao;
...
/* * for unit test only */
protected void setOrderDao(OrderDao dao){ orderDao = dao; } }
Breaking the encapsula0on
Unit tes<ng
![Page 9: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/9.jpg)
• Version 2.0 h-p://needle.spree.de/
public class ShoppingCartTest {
private ShoppingCart shoppingCart; private OrderDao mock;
@Before public void setup() throws Exception { shoppingCart = new ShoppingCartService(); mock = mock(OrderDao.class); Field field = ShoppingCart.class.getDeclaredField("orderDao"); field.setAccessible(true); field.set(shoppingCart, mock); } @Test public void testCheckout() { ... } }
Using reflec0on
Unit tes<ng
![Page 10: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/10.jpg)
• Version 2.0 h-p://needle.spree.de/
Effec0ve Unit Tes0ng for Java EE § out of container tes<ng § test components in isola<on
§ reduce test setup code § analyze dependencies
and provide mocks
§ Fast in development and execu<on
Need(le) for Speed
![Page 11: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/11.jpg)
• Version 2.0 h-p://needle.spree.de/
Need(le) for Speed
public class ShoppingCartTest {
@Rule public NeedleRule needleRule = new NeedleRule();
@ObjectUnderTest private ShoppingCart shoppingCart;
@Test public void testCheckout() { boolean checkout = shoppingCart.checkout(); assertTrue(checkout); } }
![Page 12: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/12.jpg)
• Version 2.0 h-p://needle.spree.de/
Instan<a<on of @ObjectUnderTest Components
Dependency Injec<on § Field § Method § Constuctor
Default are Mock Objects
Need(le) for Speed
![Page 13: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/13.jpg)
• Version 2.0 h-p://needle.spree.de/
Out-‐of-‐the-‐box @Inject, @EJB, @Resource, @PersistenceContext, @PersistenceUnit
Configura<on of addi<onal Annota<ons § e.g. Seam 2 -‐ @In,@Logger
Configura<on of addi<onal injec<on provider § e.g. javax.inject.Qualifier
Need(le) for Speed
Injec0on Provider
![Page 14: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/14.jpg)
• Version 2.0 h-p://needle.spree.de/
Need(le) for Speed
Mock injec0on public class ShoppingCartTest { @Rule public NeedleRule needleRule = new NeedleRule(); @ObjectUnderTest private ShoppingCart shoppingCart; @Inject private OrderDao orderDaoMock; @Test public void testCheckout() { when(orderDaoMock.find(anyLong())).thenReturn(new Order()); boolean checkout = shoppingCart.checkout(); assertTrue(checkout); } }
![Page 15: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/15.jpg)
• Version 2.0 h-p://needle.spree.de/
Need(le) for Speed
Tes0ng object graphs Provide own objects
Mul<ple @ObjectUnderTest Components Wiring complex object graph § @InjectInto § @InjectIntoMany
![Page 16: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/16.jpg)
• Version 2.0 h-p://needle.spree.de/
Need(le) for Speed
Database tes0ng via JPA Provider, e.g. EclipseLink or Hibernate
En<tyManager crea<on and injec<on
Op<onal: Execute Database opera<on on test setup and teardown
§ Import SQL Scripts § Dele<ng test data aaer the test execu<on
![Page 17: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/17.jpg)
• Version 2.0 h-p://needle.spree.de/
Need(le) for Speed
public class OrderDaoTest {
@Rule public DatabaseRule dbRule = new DatabaseRule();
@Rule public NeedleRule needleRule = new NeedleRule(dbRule);
@ObjectUnderTest private OrderDao orderDao;
@Test public void testFind() { Order order = new OrderTestdataBuilder().buildAndSave(); Order orderFromDb = orderDao.find(order.getId()); assertEquals(checkout); } }
![Page 18: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/18.jpg)
• Version 2.0 h-p://needle.spree.de/
Live Demo
DEMO h-p://seam-‐archetype.sourceforge.net/jbosscc-‐seam-‐archetype/1.4/javaee.html
![Page 19: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/19.jpg)
• Version 2.0 h-p://needle.spree.de/
Fast Less Glue Code Keep Dependencies Private Flexible & Extensible Developer Happiness ;-‐)
Summary
Summary
![Page 20: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/20.jpg)
• Version 2.0 h-p://needle.spree.de/
Get Started Today!
<dependency> <groupId>de.akquinet.jbosscc</groupId> <artifactId>jbosscc-needle</artifactId> <version>2.1</version> <scope>test</scope> </dependency>
Summary
![Page 21: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/21.jpg)
• Version 2.0 h-p://needle.spree.de/
http://needle.spree.de
http://sourceforge.net/projects/jbosscc-needle/
http://blog.akquinet.de/
Links
![Page 22: Need(le) for Speed - Effective Unit Testing for Java EE](https://reader033.vdocuments.net/reader033/viewer/2022060110/555e575ed8b42a8e4c8b50b8/html5/thumbnails/22.jpg)
• Version 2.0
Logo auf dunklen Hintergrund (z.B. Website)
Logo auf hellem Hintergrund
Logo in Graustufen
Logo in Schwarz/Weiss
NEEDLEfor Java EE
NEEDLEfor Java EE
NEEDLEfor Java EE
NEEDLEfor Java EE
h-p://needle.spree.de/