@JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr...
Transcript of @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr...
![Page 2: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/2.jpg)
Why BDD?
![Page 4: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/4.jpg)
Typical Test@ T e s tp u b l i c v o i d s h o u l d I n s e r t P e t I n t o D a t a b a s e A n d G e n e r a t e I d ( ) { O w n e r o w n e r 6 = t h i s . c l i n i c S e r v i c e . f i n d O w n e r B y I d ( 6 ) ; i n t f o u n d = o w n e r 6 . g e t P e t s ( ) . s i z e ( ) ;
P e t p e t = n e w P e t ( ) ; p e t . s e t N a m e ( " b o w s e r " ) ; C o l l e c t i o n < P e t T y p e > t y p e s = t h i s . c l i n i c S e r v i c e . f i n d P e t T y p e s ( ) ; p e t . s e t T y p e ( E n t i t y U t i l s . g e t B y I d ( t y p e s , P e t T y p e . c l a s s , 2 ) ) ; p e t . s e t B i r t h D a t e ( n e w D a t e T i m e ( ) ) ; o w n e r 6 . a d d P e t ( p e t ) ; a s s e r t T h a t ( o w n e r 6 . g e t P e t s ( ) . s i z e ( ) ) . i s E q u a l T o ( f o u n d + 1 ) ;
t h i s . c l i n i c S e r v i c e . s a v e P e t ( p e t ) ; t h i s . c l i n i c S e r v i c e . s a v e O w n e r ( o w n e r 6 ) ;
o w n e r 6 = t h i s . c l i n i c S e r v i c e . f i n d O w n e r B y I d ( 6 ) ; a s s e r t T h a t ( o w n e r 6 . g e t P e t s ( ) . s i z e ( ) ) . i s E q u a l T o ( f o u n d + 1 ) ; / / c h e c k s t h a t i d h a s b e e n g e n e r a t e d a s s e r t T h a t ( p e t . g e t I d ( ) ) . i s N o t N u l l ( ) ;}
Example from github.com/spring-projects/spring-petclinic
![Page 5: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/5.jpg)
Issues with typical testsMany technical and often irrelevant details
Point of the test often hard to grasp
Code duplication
Can only be read by developers
Cannot be used as documentation
![Page 6: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/6.jpg)
Behavior-Driven Development Behavior is described in a common domain language
understandable by domain experts Domain experts and developers collaborate on defining
the behavior Executed like normal tests Creates a living documentation
![Page 7: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/7.jpg)
BDD ExampleS c e n a r i o : P e t s c a n b e a s s i g n e d t o p e t o w n e r s
G i v e n a p e t o w n e r A n d a d o g W h e n a s s i g n i n g t h e p e t t o t h e p e t o w n e r T h e n t h e p e t o w n e r o w n s a n a d d i t i o n a l p e t
![Page 8: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/8.jpg)
BDD in Java
![Page 9: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/9.jpg)
"Classical" BDD Frameworks Cucumber: Plain Text + Java JBehave: Plain Text + Java Concordion: HTML + Java Fitness: Wiki + Java
Additional maintenance cost
![Page 10: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/10.jpg)
Developer-friendly BDDFrameworks Spock: Groovy ScalaTest: Scala Jnario: Xtend Serenity*: Java
*strongly focused on web testing, shares some concepts with JGiven
![Page 11: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/11.jpg)
![Page 12: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/12.jpg)
Stack Overflow?
![Page 13: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/13.jpg)
, Source: http://stackoverflow.com/questions/16036120/ Author: http://stackoverflow.com/users/1371775/sody
![Page 14: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/14.jpg)
JGiven
![Page 15: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/15.jpg)
Goals Developer friendly (low maintenance overhead)
Readable test code (Given-When-Then)
Modular and reusable test code
Reports for domain experts
![Page 16: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/16.jpg)
Demo
![Page 17: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/17.jpg)
Scenarios in JGiveni m p o r t o r g . j u n i t . T e s t ; i m p o r t c o m . t n g t e c h . j g i v e n . j u n i t . S c e n a r i o T e s t ;
p u b l i c c l a s s F i n d O w n e r T e s t e x t e n d s S c e n a r i o T e s t < G i v e n O w n e r , W h e n S e a r c h i n g , T h e n O w n e r > {
@ T e s t p u b l i c v o i d o w n e r s _ c a n _ b e _ f o u n d _ b y _ l a s t _ n a m e ( ) {
g i v e n ( ) . a n _ o w n e r _ w i t h _ l a s t _ n a m e ( " S m i t h " ) ;
w h e n ( ) . s e a r c h i n g _ f o r ( " S m i t h " ) ;
t h e n ( ) . e x a c t l y _ t h e _ g i v e n _ o w n e r _ i s _ f o u n d ( ) ; } }
![Page 18: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/18.jpg)
Stage Classes@ J G i v e n S t a g e / / o n l y n e e d e d w h e n u s i n g S p r i n g p u b l i c c l a s s W h e n S e a r c h i n g e x t e n d s S t a g e < W h e n S e a r c h i n g > {
@ A u t o w i r e d C l i n i c S e r v i c e c l i n i c S e r v i c e ;
@ S c e n a r i o S t a t e O w n e r o w n e r ;
p u b l i c W h e n S e a r c h i n g s e a r c h i n g _ f o r ( S t r i n g n a m e ) { o w n e r = t h i s . c l i n i c S e r v i c e . f i n d O w n e r B y N a m e ( n a m e ) ; r e t u r n t h i s ; } }
![Page 19: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/19.jpg)
Owners can be found by last name
Given an owner with last name "Smith" When searching for "Smith" Then exactly the given owner is found
Console Output
![Page 20: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/20.jpg)
HTML5 App
jgiven.org/jgiven-report/html5/ (Local)
https://github.com/mthuret/xke-jgiven (Local)
![Page 21: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/21.jpg)
Practical Experience 3 years of experience in a large Java Enterprise project (up to 70
developers) Over 3000 Scenarios Readability and reusability of test code has been greatly improved Maintenance costs of automated tests have been reduced (no hard
numbers) Well accepted by developers Easy to learn by new developers Developers and domain experts collaborate using scenarios
![Page 22: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/22.jpg)
Further Features
![Page 23: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/23.jpg)
Parameterized Scenarios@ T e s t @ D a t a P r o v i d e r ( { " S m i t h , 1 " , " D a v i s , 0 " , " S m , 1 " } ) p u b l i c v o i d s h o u l d _ f i n d _ o w n e r _ b y _ l a s t _ n a m e ( S t r i n g s e a r c h T e r m , i n t n u m b e r O f R e s u l t s ) {
g i v e n ( ) . a n _ o w n e r _ w i t h _ l a s t _ n a m e ( " S m i t h " ) ;
w h e n ( ) . s e a r c h i n g _ f o r ( s e a r c h T e r m ) ;
t h e n ( ) . e x a c t l y _ $ _ o w n e r _ i s _ f o u n d ( n u m b e r O f R e s u l t s ) ; }
Uses the DataProviderRunner ( ). Parameterized Runner and Theories of JUnit are also supported.
github.com/TNG/junit-dataprovider
![Page 24: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/24.jpg)
Parameterized ScenariosConsole Output
S h o u l d f i n d o w n e r b y l a s t n a m e
G i v e n a n o w n e r w i t h l a s t n a m e S m i t h W h e n s e a r c h i n g f o r < s e a r c h T e r m > T h e n e x a c t l y < n u m b e r O f R e s u l t s > o w n e r i s f o u n d
C a s e s :
| # | s e a r c h T e r m | n u m b e r O f R e s u l t s | S t a t u s | + - - - + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - + - - - - - - - - - + | 1 | S m i t h | 1 | S u c c e s s | | 2 | D a v i s | 0 | S u c c e s s | | 3 | S m | 1 | S u c c e s s |
![Page 25: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/25.jpg)
Parameterized ScenariosHTML Report
![Page 26: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/26.jpg)
Parameter Formatting Default: toString() @Format( MyCustomFormatter.class ) @Formatf( " -- %s -- " ) @MyCustomFormatAnnotation
![Page 27: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/27.jpg)
@Format( value = BooleanFormatter.class, args = { "on", "off" } ) @Retention( RetentionPolicy.RUNTIME ) @interface OnOff {}
Example@OnOff
Apply to parameterpublic SELF the_machine_is_$( @OnOff boolean onOrOff ) { ... }
Use stepgiven().the_machine_is_$( false );
ReportGiven the machine is off
![Page 28: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/28.jpg)
@BeforeScenario und@AfterScenario
p u b l i c c l a s s G i v e n S t e p s e x t e n d s S t a g e < G i v e n S t e p s > {
@ P r o v i d e d S c e n a r i o S t a t e F i l e t e m p o r a r y F o l d e r ;
@ B e f o r e S c e n a r i o v o i d s e t u p T e m p o r a r y F o l d e r ( ) { t e m p o r a r y F o l d e r = . . . }
@ A f t e r S c e n a r i o v o i d d e l e t e T e m p o r a r y F o l d e r ( ) { t e m p o r a r y F o l d e r . d e l e t e ( ) ; } }
![Page 29: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/29.jpg)
@ScenarioRulep u b l i c c l a s s T e m p o r a r y F o l d e r R u l e { F i l e t e m p o r a r y F o l d e r ;
p u b l i c v o i d b e f o r e ( ) { t e m p o r a r y F o l d e r = . . . }
p u b l i c v o i d a f t e r ( ) { t e m p o r a r y F o l d e r . d e l e t e ( ) ; } }
p u b l i c c l a s s G i v e n S t e p s e x t e n d s S t a g e < G i v e n S t e p s > { @ S c e n a r i o R u l e T e m p o r a r y F o l d e r R u l e r u l e = n e w T e m p o r a r y F o l d e r R u l e ( ) ; }
![Page 30: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/30.jpg)
@AfterStage, @BeforeStagep u b l i c c l a s s G i v e n C u s t o m e r e x t e n d s S t a g e < G i v e n S t e p s > { C u s t o m e r B u i l d e r b u i l d e r ;
@ P r o v i d e d S c e n a r i o S t a t e C u s t o m e r c u s t o m e r ;
p u b l i c v o i d a _ c u s t o m e r ( ) { b u i l d e r = n e w C u s t o m e r B u i l d e r ( ) ; }
p u b l i c v o i d w i t h _ a g e ( i n t a g e ) { b u i l d e r . w i t h A g e ( a g e ) ; }
@ A f t e r S t a g e v o i d b u i l d C u s t o m e r ( ) { c u s t o m e r = b u i l d e r . b u i l d ( ) ; } }
![Page 31: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/31.jpg)
Tags@ T e s t @ F e a t u r e E m a i l v o i d t h e _ c u s t o m e r _ g e t s _ a n _ e m a i l _ w h e n _ o r d e r i n g _ a _ b o o k ( ) { . . . }
With Values
@ T e s t @ S t o r y ( " A B C - 1 2 3 " ) v o i d t h e _ c u s t o m e r _ g e t s _ a n _ e m a i l _ w h e n _ o r d e r i n g _ a _ b o o k ( ) { . . . }
![Page 32: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/32.jpg)
@Pending Marks whole scenarios or single steps as pending Steps are skipped and marked accordingly
HTML Report
![Page 33: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/33.jpg)
@Hidden Marks methods to not appear in the report Useful for technical methods
@ H i d d e n p u b l i c S E L F d o S o m e t h i n g T e c h n i c a l ( ) { . . . }
![Page 34: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/34.jpg)
Extended Step Descriptions@ E x t e n d e d D e s c r i p t i o n ( " T h e H i t c h h i k e r ' s G u i d e t o t h e G a l a x y , " + " b y d e f a u l t t h e b o o k i s n o t o n s t o c k " ) p u b l i c S E L F a _ b o o k ( ) { . . . }
HTML Report
![Page 35: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/35.jpg)
Attachmentsp u b l i c c l a s s H t m l 5 R e p o r t S t a g e { @ E x p e c t e d S c e n a r i o S t a t e p r o t e c t e d C u r r e n t S t e p c u r r e n t S t e p ; / / p r o v i d e d b y J G i v e n
p r o t e c t e d v o i d t a k e S c r e e n s h o t ( ) { S t r i n g b a s e 6 4 = ( ( T a k e s S c r e e n s h o t ) w e b D r i v e r ) . g e t S c r e e n s h o t A s ( O u t p u t T y p e . B A S E 6 4 ) ; c u r r e n t S t e p . a d d A t t a c h m e n t ( A t t a c h m e n t . f r o m B a s e 6 4 ( b a s e 6 4 , M e d i a T y p e . P N G ) . w i t h T i t l e ( " S c r e e n s h o t " ) ) ; } }
HTML Report
![Page 36: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/36.jpg)
Inline Attachments
Source: https://github.com/mthuret/xke-jgiven
![Page 37: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/37.jpg)
Summary Developer friendly
Highly modular and reusable test code
Just Java, no further language is needed
Easy to integrate into existing test infrastructures (JUnit, TestNG)
Open Source (Apache 2 Licence)
Maven and Jenkins plugins
Nice reports for domain experts
Domain experts can not write scenarios in JGiven
(But they can write them in any other format and developers can easily translate them to JGiven)
BDD without the hassle!
![Page 38: @JanSchfr JGiven: Pragmatic BDD for Java · JGiven: Pragmatic BDD for Java Jan Schäfer @JanSchfr Sep 20, 2016. Why BDD? Typical Test @ T e s t p u b l i c v o i d s h o u l d I n](https://reader034.fdocuments.us/reader034/viewer/2022042220/5ec6a8e6b673cc1e1f66084c/html5/thumbnails/38.jpg)
jgiven.org
github.com/TNG/JGivenhttps://janschaefer.github.io/jgiven-slides-javaone-2016/
Thank You!@JanSchfr