SlideShare a Scribd company logo
1 of 41
Download to read offline
JUNIT
Beyond the basics
/AdamDudczak @maneo
Atmosphere2014,Warszawa,19-20.05.2014
WHO AM I?
Software Engineer in Allegro group
Workingwith Java(and JUnit) since 2004
One of the leaders of
Co-organizer of conference
Poznań JUG
GeeCON
WHY JUNIT?
source:wikipedia
THERE IS NO SPOCK...
source:http://bit.ly/R0r8Ox
WHY NOT?
source:http://bit.ly/1jNoT8f
ERRORRATE CLASS
publicclassErrorRate{
doubleerrorRate;
publicErrorRate(longnoOfItems,longnoOfErrors){
errorRate=calculateErrorRate(noOfItems,noOfErrors);
}
doublecalculateErrorRate(longnoOfItems,longnoOfErrors){
...
}
publicStringgetErrorRateAsString(){
returnString.format("%2.02f",errorRate);
}
}
SIMPLE ERRORRATE TEST
publicclassErrorRateTest{
@Test
publicvoidshouldCalculateErrorRate(){
//given
ErrorRateerrorRate=newErrorRate(100,10);
//when
Stringresult=errorRate.getErrorRateAsString();
//then
assertThat(result,is("0.01"));
}
}
SIMPLE ERRORRATE TEST
Object[][]testParameters=newObject[][]{
newObject[]{100,1,"0.01"},
newObject[]{0,0,"0.00"},
};
@Test
publicvoidshouldCalculateErrorRate1(){
for(inti=0;i>testParameters.length;i++){
ErrorRateerrorRate
=newErrorRate((Integer)testParameters[i][0],
(Integer)testParameters[i][1]);
Stringresult=errorRate.getErrorRateAsString();
assertThat(result,is((String)testParameters[i][2]));
}
}
LET'S BRAKE SOMETHING...
Object[][]testParameters=newObject[][]{
newObject[]{ 100,1,"0.02"},
newObject []{0,0,"0.02"},
};
Firsterror stops test
Allcases are seen as one test
JUNIT PARAMETRIZED
@RunWith(Parameterized.class)
publicclassErrorRateTest{
@Parameters
publicstaticCollection<Object[]>data(){
returnArrays.asList(newObject[][]{
newObject[]{100,1,"0.01"},
newObject[]{0,0,"0.00"},});
}
...
JUNIT PARAMETRIZED (2)
...
longtotalNumberOfItems;
longtotalNumberOfRejected;
doublefinalErrorRate;
publicErrorRateTest(longtotalNumberOfItems,
longtotalNumberOfRejected,
doublefinalErrorRate){
this.totalNumberOfItems=totalNumberOfItems;
this.totalNumberOfRejected=totalNumberOfRejected;
this.finalErrorRate=finalErrorRate;
}
...
JUNIT PARAMETRIZED (3)
...
@Test
publicvoidshouldCalculateErrorRate(){
//given
ErrorRateerrorRate=newErrorRate(totalNumberOfItems,
totalNumberOfRejected);
//when
Stringresult=errorRate.getErrorRateAsString();
//then
assertThat(result,is(finalErrorRate));
}
...
LET'S BRAKE SOMETHING...
Two independenttests
Alotof boilerplate code!
Onlyone occurance of @Parameters per class
JUNIT-PARAMS
Parameterised tests thatdon'tsuck
Created byPaweł Lipiński
Alotof veryinterestingideas.
https://code.google.com/p/junitparams/
<dependency>
<groupId>pl.pragmatists</groupId>
<artifactId>JUnitParams</artifactId>
<version>1.0.2</version>
<scope>test</scope>
</dependency>
JUNIT-PARAMS - SHOWCASE
@RunWith(JUnitParamsRunner.class)
publicclassSamples_of_Usage_Test{
@Test
@Parameters({"AAA,1","BBB,2"})
publicvoidparams_in_annotation(Stringp1,Integerp2){}
@Test
@Parameters
publicvoidparams_in_default_method(Stringp1,Integerp2){}
privateObjectparametersForParams_in_default_method()
{
return$($("AAA",1),$("BBB",2));
}
JUNIT-PARAMS - SHOWCASE
@Test
@Parameters(method="named2,named3")
publicvoidparams_in_multiple_methods(Stringp1,Integerp2){}
privateObjectnamed2(){return$($("AAA",1));}
privateObjectnamed3(){return$($("BBB",2));}
@Test
@Parameters(source
=ParametersProvidersTest.OneIntegerProvider.class)
publicvoidparameters_from_external_class(intinteger){}
JUNIT-PARAMS - SHOWCASE
@Test
@FileParameters("src/test/resources/test.csv")
publicvoidload_params_from_csv(intage,Stringname){}
@Test
@FileParameters(value="src/test/resources/test.csv",
mapper=PersonMapper.class)
publicvoidload_params_from_any_file(PersonTest.Personperson){}
@Test
@FileParameters("classpath:test.csv")
publicvoidload_params_from_classpath(intage,Stringname){}
JUNIT-PARAMS
More examples can be found at iSamples_of_Usage_Test.java
PersonTest.java
Similar to approach in TestNG
Testcode is clear and concise -YEAH!!
ORG.JUNIT.EXPERIMENTAL.THEORIES
Theoryis, in factaparameterized test
This approach is more focused on requirements than on
particular testcases
Similar to ScalaCheck (Scala) /QuickCheck (Erlang)
ORG.JUNIT.EXPERIMENTAL.THEORIES
Theorydescribes features of class/method and verifies them
usinggiven setof inputdata
Theoryis executed as one test
If assertion fails for anysetof inputdatawhole theoryfails
Example in ErrorRate_05_Theory_Test.java
RANDOMIZED UNIT TESTING
"Monkeytesting"-more randomness in your tests
http://labs.carrotsearch.com/randomizedtesting.html
RANDOMIZED UNIT TESTING
@Test
publicvoidrandomizedTesting(){
//Herewepicktwopositiveintegers.
//Notesuperclassutilitymethods.
inta=randomIntBetween(0,Integer.MAX_VALUE);
intb=randomIntBetween(0,Integer.MAX_VALUE);
intresult=Adder.add(a,b);
assertTrue(result+"<("+a+"or"+b+")?",
result>=a&&result>=b);
}
SOMETHING WENT WRONG!
@Seed("2300CE9BBBCFF4C8:573D00C2ABB4AD89")
@THREADLEAKING*
Randomized UnitTestinglibraryhelps to check/control
threads activity
@ThreadLeaking*annotations verfies if threads are leaking
from your tests/suite
Check outErrorRate_06_Randomized_Test.java
@RULE
source:http://bit.ly/1jNpE13
@RULE
Resuable @Before/@After... and more
Example in JunitRulesShowcaseTest
JUnithas severalbuilt-in @Rules, ex.:
ExternalResource, ExpectedException, TestName...
@RULE
publicstaticclassHasTempFolder{
@Rule
publicTemporaryFolderfolder=newTemporaryFolder();
@Test
publicvoidtestUsingTempFolder()throwsIOException{
FilecreatedFile=folder.newFile("myfile.txt");
FilecreatedFolder=folder.newFolder("subfolder");
//...
}
}
@Rule cannotbe applied to static fields -use @ClassRule
@RULE IN BETAMAX
importco.freeside.betamax.Betamax;
importco.freeside.betamax.Recorder;
importorg.junit.*;
publicclassMyTest{
@RulepublicRecorderrecorder=newRecorder();
@Betamax(tape="mytape")
@Test
publicvoidtestMethodThatAccessesExternalWebService(){
}
}
@RULE WITH SPRING AND WIREMOCK
@Rule
publicWireMockRulewireMockRule=newWireMockRule(8089);
//Checkouthttp://wiremock.org/
@Rule
publicTestRulecontextRule=newSpringContextRule(
newString[]{"testContext.xml"},this);
@Autowired
publicStringbar;
@Test
publicvoidtestBar()throwsException{
....
}
JUNIT BENCHMARKS AND TIMEOUT
publicclassMyTest{
@Rule
publicTestRulebenchmarkRun=newBenchmarkRule();
@Rule
publicTestTimeouttimeoutRule=newTestTimeout(30);
@Test
publicvoidtwentyMillis()throwsException{
Thread.sleep(20);
}
}
MyTest.twentyMillis:[measured10outof15rounds]
round:0.02[+-0.00],round.gc:0.00[+-0.00],GC.calls:0,
GC.time:0.00,time.total:0.32,
time.warmup:0.12,time.bench:0.20
JUNIT BENCHMARKS
Chartand persistentresults history
http://labs.carrotsearch.com/junit-benchmarks.html
BETTER EXCEPTION HANDLING
Example byRafał Borowiec ( )blog.codeleak.pl/
publicclassExpectedExceptionsTest{
@Rule
publicExpectedExceptionthrown=ExpectedException.none();
@Test
publicvoidverifiesTypeAndMessage(){
thrown.expect(RuntimeException.class);
thrown.expectMessage("Runtimeexceptionoccurred");
thrownewRuntimeException("Runtimeexceptionoccurred");
}
}
"NEW" ASSERTIONS
source:http://bit.ly/1taOW0H
"NEW" ASSERTIONS
assertThatand built-in Hamcrestmatchers
Readable assertions and better error handling
assertThat("thisstring",is("thisstring"));
assertThat(theBiscuit,is(equalTo(myBiscuit)));
assertThat("thisstring",containsString("is"));
ALTERNATIVE APPROACH - FEST/ASSERTJ
Alternative (butin factamainstream) wayof building
assertions
gives access to hundreds of assertionsAssertJ
assertThat(frodo.getName()).isEqualTo("Frodo");
assertThat(frodo).isNotEqualTo(sauron)
.isIn(fellowshipOfTheRing);
assertThat(sauron).isNotIn(fellowshipOfTheRing);
ORGANIZE TESTS IN @SUITE
@RunWith(Suite.class)
@SuiteClasses({
ErrorRate_01_SimpleTest.class,
ErrorRate_03_Parametrized_Test.class
})
publicclassSuiteInitializationExample{
@ClassRule
publicstaticExternalResourceresource=newExternalResource(){
@Override
protectedvoidbefore()throwsThrowable{
System.out.println("StartingtheheavyweightServer");
};
@Override
protectedvoidafter(){
System.out.println("StoppingtheheavyweightServer");
};
};
}
CATEGORIES/SUITES AND BUILD TOOLS
Suite is abitAnt-ish -use Categories
Categories are supported byboth andMaven Gradle
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<groups>com.ex.FastTests,com.ex.RegressionTests</groups>
</configuration>
</plugin>
</plugins>
</build>
USE CATEGORIES ON THE @SUITE LEVEL
publicclassHeavyIntegrationTest{
@Test
@Category(HeavyWeight.class)
publicvoidshouldCalculateErrorRate(){
assumeTrue(isHeavyWeightServerRunning());
//heavestuffwithheavyWeightserverhere
}
...
USE CATEGORIES ON THE @SUITE LEVEL
@RunWith(Categories.class)
@IncludeCategory(HeavyWeight.class)
@SuiteClasses({
ErrorRate_01_SimpleTest.class,
HeavyIntegrationTest.class
})
publicclassSuiteWithCategories{
//categorymarkerinterface
publicinterfaceHeavyWeight{}
...
CODE SAMPLES
Allexamples can be found at:
https://bitbucket.org/maneo/junit-presentation/
THAT'S ALL FOLKS
Thank you for your attention.
adam (at) dudczak.info /@maneo

More Related Content

Viewers also liked

JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav TulachJDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav TulachPROIDEA
 
JDD2015: Migrating to continuous delivery in the world of financial trading -...
JDD2015: Migrating to continuous delivery in the world of financial trading -...JDD2015: Migrating to continuous delivery in the world of financial trading -...
JDD2015: Migrating to continuous delivery in the world of financial trading -...PROIDEA
 
CONFidence 2014: Dimitriy Chastuhin: All your sap p@$$w0яd z belong to us
CONFidence 2014: Dimitriy Chastuhin:  All your sap p@$$w0яd z belong to usCONFidence 2014: Dimitriy Chastuhin:  All your sap p@$$w0яd z belong to us
CONFidence 2014: Dimitriy Chastuhin: All your sap p@$$w0яd z belong to usPROIDEA
 
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...PROIDEA
 
Atmosphere 2014: Helping the Internet to scale since 1998 - Paweł Kuśmierski
Atmosphere 2014: Helping the Internet to scale since 1998 - Paweł KuśmierskiAtmosphere 2014: Helping the Internet to scale since 1998 - Paweł Kuśmierski
Atmosphere 2014: Helping the Internet to scale since 1998 - Paweł KuśmierskiPROIDEA
 
Atmosphere 2014: Scaling and securing node.js apps - Maciej Lasyk
Atmosphere 2014: Scaling and securing node.js apps - Maciej LasykAtmosphere 2014: Scaling and securing node.js apps - Maciej Lasyk
Atmosphere 2014: Scaling and securing node.js apps - Maciej LasykPROIDEA
 
JDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz Sieraczkiewicz
JDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz SieraczkiewiczJDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz Sieraczkiewicz
JDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz SieraczkiewiczPROIDEA
 
JDD2015: Ratpack: core of your micro-services - Andrey Adamovich
JDD2015: Ratpack: core of your micro-services - Andrey AdamovichJDD2015: Ratpack: core of your micro-services - Andrey Adamovich
JDD2015: Ratpack: core of your micro-services - Andrey AdamovichPROIDEA
 
Atmosphere 2014: RE:SPONSIBILITY - Matt Harasymczuk
Atmosphere 2014: RE:SPONSIBILITY - Matt HarasymczukAtmosphere 2014: RE:SPONSIBILITY - Matt Harasymczuk
Atmosphere 2014: RE:SPONSIBILITY - Matt HarasymczukPROIDEA
 
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...PROIDEA
 
PLNOG15 :Contagious SDN - consequences of dealing with it, Paweł Korzec
PLNOG15 :Contagious SDN - consequences of dealing with it, Paweł KorzecPLNOG15 :Contagious SDN - consequences of dealing with it, Paweł Korzec
PLNOG15 :Contagious SDN - consequences of dealing with it, Paweł KorzecPROIDEA
 
JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE -...
JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE -...JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE -...
JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE -...PROIDEA
 
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...PROIDEA
 
JDD2014: Introducing groovy into JAVA project - Yuriy Chulovskyy
JDD2014: Introducing groovy into JAVA project - Yuriy ChulovskyyJDD2014: Introducing groovy into JAVA project - Yuriy Chulovskyy
JDD2014: Introducing groovy into JAVA project - Yuriy ChulovskyyPROIDEA
 
JDD2014: Effective refactoring - Włodek Krakowski
JDD2014:  Effective refactoring - Włodek KrakowskiJDD2014:  Effective refactoring - Włodek Krakowski
JDD2014: Effective refactoring - Włodek KrakowskiPROIDEA
 
JDD 2015: Artificial intelligence. Status report. - Tomasz Jackowiak
JDD 2015: Artificial intelligence. Status report. - Tomasz Jackowiak JDD 2015: Artificial intelligence. Status report. - Tomasz Jackowiak
JDD 2015: Artificial intelligence. Status report. - Tomasz Jackowiak PROIDEA
 

Viewers also liked (16)

JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav TulachJDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
 
JDD2015: Migrating to continuous delivery in the world of financial trading -...
JDD2015: Migrating to continuous delivery in the world of financial trading -...JDD2015: Migrating to continuous delivery in the world of financial trading -...
JDD2015: Migrating to continuous delivery in the world of financial trading -...
 
CONFidence 2014: Dimitriy Chastuhin: All your sap p@$$w0яd z belong to us
CONFidence 2014: Dimitriy Chastuhin:  All your sap p@$$w0яd z belong to usCONFidence 2014: Dimitriy Chastuhin:  All your sap p@$$w0яd z belong to us
CONFidence 2014: Dimitriy Chastuhin: All your sap p@$$w0яd z belong to us
 
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
CONFidence 2014: Alexander Timorin: SCADA deep inside: protocols and security...
 
Atmosphere 2014: Helping the Internet to scale since 1998 - Paweł Kuśmierski
Atmosphere 2014: Helping the Internet to scale since 1998 - Paweł KuśmierskiAtmosphere 2014: Helping the Internet to scale since 1998 - Paweł Kuśmierski
Atmosphere 2014: Helping the Internet to scale since 1998 - Paweł Kuśmierski
 
Atmosphere 2014: Scaling and securing node.js apps - Maciej Lasyk
Atmosphere 2014: Scaling and securing node.js apps - Maciej LasykAtmosphere 2014: Scaling and securing node.js apps - Maciej Lasyk
Atmosphere 2014: Scaling and securing node.js apps - Maciej Lasyk
 
JDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz Sieraczkiewicz
JDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz SieraczkiewiczJDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz Sieraczkiewicz
JDD2015: Trudne Rozmowy [WORKSHOP] - Mariusz Sieraczkiewicz
 
JDD2015: Ratpack: core of your micro-services - Andrey Adamovich
JDD2015: Ratpack: core of your micro-services - Andrey AdamovichJDD2015: Ratpack: core of your micro-services - Andrey Adamovich
JDD2015: Ratpack: core of your micro-services - Andrey Adamovich
 
Atmosphere 2014: RE:SPONSIBILITY - Matt Harasymczuk
Atmosphere 2014: RE:SPONSIBILITY - Matt HarasymczukAtmosphere 2014: RE:SPONSIBILITY - Matt Harasymczuk
Atmosphere 2014: RE:SPONSIBILITY - Matt Harasymczuk
 
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
 
PLNOG15 :Contagious SDN - consequences of dealing with it, Paweł Korzec
PLNOG15 :Contagious SDN - consequences of dealing with it, Paweł KorzecPLNOG15 :Contagious SDN - consequences of dealing with it, Paweł Korzec
PLNOG15 :Contagious SDN - consequences of dealing with it, Paweł Korzec
 
JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE -...
JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE -...JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE -...
JDD2014/ 4Developers 2015: Błędy uwierzytelniania i zarządzania sesją w JEE -...
 
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
 
JDD2014: Introducing groovy into JAVA project - Yuriy Chulovskyy
JDD2014: Introducing groovy into JAVA project - Yuriy ChulovskyyJDD2014: Introducing groovy into JAVA project - Yuriy Chulovskyy
JDD2014: Introducing groovy into JAVA project - Yuriy Chulovskyy
 
JDD2014: Effective refactoring - Włodek Krakowski
JDD2014:  Effective refactoring - Włodek KrakowskiJDD2014:  Effective refactoring - Włodek Krakowski
JDD2014: Effective refactoring - Włodek Krakowski
 
JDD 2015: Artificial intelligence. Status report. - Tomasz Jackowiak
JDD 2015: Artificial intelligence. Status report. - Tomasz Jackowiak JDD 2015: Artificial intelligence. Status report. - Tomasz Jackowiak
JDD 2015: Artificial intelligence. Status report. - Tomasz Jackowiak
 

Similar to Atmosphere 2014: JUnit: beyond the basics - Adam Dudczak

Communication between Java and Python
Communication between Java and PythonCommunication between Java and Python
Communication between Java and PythonAndreas Schreiber
 
Improving Android Performance at Droidcon UK 2014
Improving Android Performance at Droidcon UK 2014Improving Android Performance at Droidcon UK 2014
Improving Android Performance at Droidcon UK 2014Raimon Ràfols
 
Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9Ismar Silveira
 
Flutter Forward EXTENDED - Flutter로 앱 개발 입문하기
Flutter Forward EXTENDED -  Flutter로 앱 개발 입문하기Flutter Forward EXTENDED -  Flutter로 앱 개발 입문하기
Flutter Forward EXTENDED - Flutter로 앱 개발 입문하기SuJang Yang
 
Job Managment Portlet
Job Managment PortletJob Managment Portlet
Job Managment Portletriround
 
Developing R Graphical User Interfaces
Developing R Graphical User InterfacesDeveloping R Graphical User Interfaces
Developing R Graphical User InterfacesSetia Pramana
 
From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)Jose Manuel Pereira Garcia
 
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsJDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsPROIDEA
 
jhpcerrorErrorLog.javajhpcerrorErrorLog.javaCopyright (c.docx
jhpcerrorErrorLog.javajhpcerrorErrorLog.javaCopyright (c.docxjhpcerrorErrorLog.javajhpcerrorErrorLog.javaCopyright (c.docx
jhpcerrorErrorLog.javajhpcerrorErrorLog.javaCopyright (c.docxpriestmanmable
 
Improving Java performance at JBCNConf 2015
Improving Java performance at JBCNConf 2015Improving Java performance at JBCNConf 2015
Improving Java performance at JBCNConf 2015Raimon Ràfols
 
Annotation Processing in Android
Annotation Processing in AndroidAnnotation Processing in Android
Annotation Processing in Androidemanuelez
 
The definitive guide to java agents
The definitive guide to java agentsThe definitive guide to java agents
The definitive guide to java agentsRafael Winterhalter
 
Avoid loss of hair while coding Unity3D plugin for mobile
Avoid loss of hair while coding Unity3D plugin for mobileAvoid loss of hair while coding Unity3D plugin for mobile
Avoid loss of hair while coding Unity3D plugin for mobileValerio Riva
 
Avoid loss of hair while coding Unity3D plugins for mobile
Avoid loss of hair while coding Unity3D plugins for mobileAvoid loss of hair while coding Unity3D plugins for mobile
Avoid loss of hair while coding Unity3D plugins for mobileCodemotion
 
The 2016 Android Developer Toolbox [MOBILIZATION]
The 2016 Android Developer Toolbox [MOBILIZATION]The 2016 Android Developer Toolbox [MOBILIZATION]
The 2016 Android Developer Toolbox [MOBILIZATION]Nilhcem
 
Java_Exception-CheatSheet_Edureka.pdf
Java_Exception-CheatSheet_Edureka.pdfJava_Exception-CheatSheet_Edureka.pdf
Java_Exception-CheatSheet_Edureka.pdfFurkan Furkan
 

Similar to Atmosphere 2014: JUnit: beyond the basics - Adam Dudczak (20)

Communication between Java and Python
Communication between Java and PythonCommunication between Java and Python
Communication between Java and Python
 
Improving Android Performance at Droidcon UK 2014
Improving Android Performance at Droidcon UK 2014Improving Android Performance at Droidcon UK 2014
Improving Android Performance at Droidcon UK 2014
 
Pimp My Java LavaJUG
Pimp My Java LavaJUGPimp My Java LavaJUG
Pimp My Java LavaJUG
 
Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9Paradigmas de linguagens de programacao - aula#9
Paradigmas de linguagens de programacao - aula#9
 
E:\Plp 2009 2\Plp 9
E:\Plp 2009 2\Plp 9E:\Plp 2009 2\Plp 9
E:\Plp 2009 2\Plp 9
 
Flutter Forward EXTENDED - Flutter로 앱 개발 입문하기
Flutter Forward EXTENDED -  Flutter로 앱 개발 입문하기Flutter Forward EXTENDED -  Flutter로 앱 개발 입문하기
Flutter Forward EXTENDED - Flutter로 앱 개발 입문하기
 
Job Managment Portlet
Job Managment PortletJob Managment Portlet
Job Managment Portlet
 
Developing R Graphical User Interfaces
Developing R Graphical User InterfacesDeveloping R Graphical User Interfaces
Developing R Graphical User Interfaces
 
From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)
 
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsJDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
 
Core java
Core javaCore java
Core java
 
Java API, Exceptions and IO
Java API, Exceptions and IOJava API, Exceptions and IO
Java API, Exceptions and IO
 
jhpcerrorErrorLog.javajhpcerrorErrorLog.javaCopyright (c.docx
jhpcerrorErrorLog.javajhpcerrorErrorLog.javaCopyright (c.docxjhpcerrorErrorLog.javajhpcerrorErrorLog.javaCopyright (c.docx
jhpcerrorErrorLog.javajhpcerrorErrorLog.javaCopyright (c.docx
 
Improving Java performance at JBCNConf 2015
Improving Java performance at JBCNConf 2015Improving Java performance at JBCNConf 2015
Improving Java performance at JBCNConf 2015
 
Annotation Processing in Android
Annotation Processing in AndroidAnnotation Processing in Android
Annotation Processing in Android
 
The definitive guide to java agents
The definitive guide to java agentsThe definitive guide to java agents
The definitive guide to java agents
 
Avoid loss of hair while coding Unity3D plugin for mobile
Avoid loss of hair while coding Unity3D plugin for mobileAvoid loss of hair while coding Unity3D plugin for mobile
Avoid loss of hair while coding Unity3D plugin for mobile
 
Avoid loss of hair while coding Unity3D plugins for mobile
Avoid loss of hair while coding Unity3D plugins for mobileAvoid loss of hair while coding Unity3D plugins for mobile
Avoid loss of hair while coding Unity3D plugins for mobile
 
The 2016 Android Developer Toolbox [MOBILIZATION]
The 2016 Android Developer Toolbox [MOBILIZATION]The 2016 Android Developer Toolbox [MOBILIZATION]
The 2016 Android Developer Toolbox [MOBILIZATION]
 
Java_Exception-CheatSheet_Edureka.pdf
Java_Exception-CheatSheet_Edureka.pdfJava_Exception-CheatSheet_Edureka.pdf
Java_Exception-CheatSheet_Edureka.pdf
 

Recently uploaded

Introduction to Prompt Engineering (Focusing on ChatGPT)
Introduction to Prompt Engineering (Focusing on ChatGPT)Introduction to Prompt Engineering (Focusing on ChatGPT)
Introduction to Prompt Engineering (Focusing on ChatGPT)Chameera Dedduwage
 
lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.lodhisaajjda
 
Presentation on Engagement in Book Clubs
Presentation on Engagement in Book ClubsPresentation on Engagement in Book Clubs
Presentation on Engagement in Book Clubssamaasim06
 
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdfAWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdfSkillCertProExams
 
Report Writing Webinar Training
Report Writing Webinar TrainingReport Writing Webinar Training
Report Writing Webinar TrainingKylaCullinane
 
If this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New NigeriaIf this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New NigeriaKayode Fayemi
 
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptx
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptxMohammad_Alnahdi_Oral_Presentation_Assignment.pptx
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptxmohammadalnahdi22
 
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptxChiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptxraffaeleoman
 
Dreaming Marissa Sánchez Music Video Treatment
Dreaming Marissa Sánchez Music Video TreatmentDreaming Marissa Sánchez Music Video Treatment
Dreaming Marissa Sánchez Music Video Treatmentnswingard
 
No Advance 8868886958 Chandigarh Call Girls , Indian Call Girls For Full Nigh...
No Advance 8868886958 Chandigarh Call Girls , Indian Call Girls For Full Nigh...No Advance 8868886958 Chandigarh Call Girls , Indian Call Girls For Full Nigh...
No Advance 8868886958 Chandigarh Call Girls , Indian Call Girls For Full Nigh...Sheetaleventcompany
 
Call Girl Number in Khar Mumbai📲 9892124323 💞 Full Night Enjoy
Call Girl Number in Khar Mumbai📲 9892124323 💞 Full Night EnjoyCall Girl Number in Khar Mumbai📲 9892124323 💞 Full Night Enjoy
Call Girl Number in Khar Mumbai📲 9892124323 💞 Full Night EnjoyPooja Nehwal
 
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...Hasting Chen
 
Air breathing and respiratory adaptations in diver animals
Air breathing and respiratory adaptations in diver animalsAir breathing and respiratory adaptations in diver animals
Air breathing and respiratory adaptations in diver animalsaqsarehman5055
 
ANCHORING SCRIPT FOR A CULTURAL EVENT.docx
ANCHORING SCRIPT FOR A CULTURAL EVENT.docxANCHORING SCRIPT FOR A CULTURAL EVENT.docx
ANCHORING SCRIPT FOR A CULTURAL EVENT.docxNikitaBankoti2
 
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort ServiceDelhi Call girls
 
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort ServiceDelhi Call girls
 
Causes of poverty in France presentation.pptx
Causes of poverty in France presentation.pptxCauses of poverty in France presentation.pptx
Causes of poverty in France presentation.pptxCamilleBoulbin1
 
Thirunelveli call girls Tamil escorts 7877702510
Thirunelveli call girls Tamil escorts 7877702510Thirunelveli call girls Tamil escorts 7877702510
Thirunelveli call girls Tamil escorts 7877702510Vipesco
 
Uncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoUncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoKayode Fayemi
 

Recently uploaded (20)

Introduction to Prompt Engineering (Focusing on ChatGPT)
Introduction to Prompt Engineering (Focusing on ChatGPT)Introduction to Prompt Engineering (Focusing on ChatGPT)
Introduction to Prompt Engineering (Focusing on ChatGPT)
 
lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.
 
Presentation on Engagement in Book Clubs
Presentation on Engagement in Book ClubsPresentation on Engagement in Book Clubs
Presentation on Engagement in Book Clubs
 
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdfAWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
 
Report Writing Webinar Training
Report Writing Webinar TrainingReport Writing Webinar Training
Report Writing Webinar Training
 
If this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New NigeriaIf this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New Nigeria
 
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptx
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptxMohammad_Alnahdi_Oral_Presentation_Assignment.pptx
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptx
 
ICT role in 21st century education and it's challenges.pdf
ICT role in 21st century education and it's challenges.pdfICT role in 21st century education and it's challenges.pdf
ICT role in 21st century education and it's challenges.pdf
 
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptxChiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
 
Dreaming Marissa Sánchez Music Video Treatment
Dreaming Marissa Sánchez Music Video TreatmentDreaming Marissa Sánchez Music Video Treatment
Dreaming Marissa Sánchez Music Video Treatment
 
No Advance 8868886958 Chandigarh Call Girls , Indian Call Girls For Full Nigh...
No Advance 8868886958 Chandigarh Call Girls , Indian Call Girls For Full Nigh...No Advance 8868886958 Chandigarh Call Girls , Indian Call Girls For Full Nigh...
No Advance 8868886958 Chandigarh Call Girls , Indian Call Girls For Full Nigh...
 
Call Girl Number in Khar Mumbai📲 9892124323 💞 Full Night Enjoy
Call Girl Number in Khar Mumbai📲 9892124323 💞 Full Night EnjoyCall Girl Number in Khar Mumbai📲 9892124323 💞 Full Night Enjoy
Call Girl Number in Khar Mumbai📲 9892124323 💞 Full Night Enjoy
 
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
 
Air breathing and respiratory adaptations in diver animals
Air breathing and respiratory adaptations in diver animalsAir breathing and respiratory adaptations in diver animals
Air breathing and respiratory adaptations in diver animals
 
ANCHORING SCRIPT FOR A CULTURAL EVENT.docx
ANCHORING SCRIPT FOR A CULTURAL EVENT.docxANCHORING SCRIPT FOR A CULTURAL EVENT.docx
ANCHORING SCRIPT FOR A CULTURAL EVENT.docx
 
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort Service
 
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort Service
 
Causes of poverty in France presentation.pptx
Causes of poverty in France presentation.pptxCauses of poverty in France presentation.pptx
Causes of poverty in France presentation.pptx
 
Thirunelveli call girls Tamil escorts 7877702510
Thirunelveli call girls Tamil escorts 7877702510Thirunelveli call girls Tamil escorts 7877702510
Thirunelveli call girls Tamil escorts 7877702510
 
Uncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoUncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac Folorunso
 

Atmosphere 2014: JUnit: beyond the basics - Adam Dudczak