NEEDLE for Java EE - - PowerPoint PPT Presentation

needle
SMART_READER_LITE
LIVE PREVIEW

NEEDLE for Java EE - - PowerPoint PPT Presentation

NEEDLE for Java EE Need(le)(for(Speed((Effec<ve(Unit(Tes<ng(for(Java(EE( ( Heinz(Wilming,(akquinet(AG( Version(2.0( h-p://needle.spree.de/( Mo<va<on( Why$do$we$Test?$ ! Confidence ! Cost(Reduc<on( ! Be-er(Design( !


slide-1
SLIDE 1
  • Version(2.0(

NEEDLE

for Java EE

h-p://needle.spree.de/(

Need(le)(for(Speed(–(Effec<ve(Unit(Tes<ng(for(Java(EE(

( Heinz(Wilming,(akquinet(AG(

slide-2
SLIDE 2
  • 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(

slide-3
SLIDE 3
  • Version(2.0(
h-p://needle.spree.de/(

The$levels$of$tes0ng$

! Unit( ! Integra<on( ! Acceptance( (

NEEDLE

for Java EE

Unit(tes<ng(

slide-4
SLIDE 4
  • Version(2.0(
h-p://needle.spree.de/(

Run0me$environment$

Unit(tes<ng(

slide-5
SLIDE 5
  • Version(2.0(
h-p://needle.spree.de/(

Unit9Test$environment$

Unit(tes<ng(

slide-6
SLIDE 6
  • Version(2.0(
h-p://needle.spree.de/(

Unit9Test$environment$

new ShoppingCart(); OrderDao mock = mock(OrderDao.class);

Unit(tes<ng(

slide-7
SLIDE 7
  • Version(2.0(
h-p://needle.spree.de/(

public class ShoppingCart { @Inject protected OrderDao orderDao; ... }

Breaking$the$encapsula0on$

Unit(tes<ng(

slide-8
SLIDE 8
  • Version(2.0(
h-p://needle.spree.de/(

public class ShoppingCart { @Inject private OrderDao orderDao; ... (((((((/*( (((*(for(unit(test(only( (((*/ protected void setOrderDao(OrderDao dao){

  • rderDao = dao;

} }

Breaking$the$encapsula0on$

Unit(tes<ng(

slide-9
SLIDE 9
  • 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(

slide-10
SLIDE 10
  • 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(

slide-11
SLIDE 11
  • 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); } }

slide-12
SLIDE 12
  • 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(

slide-13
SLIDE 13
  • 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$

slide-14
SLIDE 14
  • 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); } }

slide-15
SLIDE 15
  • 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(

slide-16
SLIDE 16
  • 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(

slide-17
SLIDE 17
  • 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); } }

slide-18
SLIDE 18
  • Version(2.0(
h-p://needle.spree.de/(

Live(Demo(

DEMO$

h-p://seam]archetype.sourceforge.net/jbosscc]seam]archetype/1.4/javaee.html( (

slide-19
SLIDE 19
  • Version(2.0(
h-p://needle.spree.de/(

Fast( Less(Glue(Code( Keep(Dependencies(Private( Flexible(&(Extensible(( Developer(Happiness(;])(

Summary$

Summary(

slide-20
SLIDE 20
  • 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(

slide-21
SLIDE 21
  • Version(2.0(
h-p://needle.spree.de/(

http://needle.spree.de http://sourceforge.net/projects/jbosscc-needle/ heinz.wilming@akquinet.de http://blog.akquinet.de/

Links(

slide-22
SLIDE 22
  • Version(2.0(

NEEDLE

for Java EE

h-p://needle.spree.de/(