![Page 1: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/1.jpg)
JunitPresentation & Tools
(Eclipse, Maven, Mockito, Spring)
This document: http://arnaud-nauwynck.github.io/lessons/CoursIUT-JUnit.pdf
![Page 2: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/2.jpg)
What is Junit ?
![Page 3: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/3.jpg)
Wikipedia JUnit
![Page 4: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/4.jpg)
Junit birth
Mid-90'sKent Beck developed xUnit test tool for Smalltalk
1997Beck and Gamma (authors of design patterns “Gof”)developed JUnit … on a flight from Zurich to Washington, D.C.
Written in few hours => The code is small, simple
![Page 5: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/5.jpg)
How Small is Junit ?
$ git clone https://github.com/junit-team/junit4.git$ cd junit4
$ find src/main/java -name \*.java | wc -l204
$ find src/main/java -name \*.java | xargs cat | wc -l 18136
$ … | grep -v '^\s*\*' | grep -v '^\s*/\*' | wc -l11958
~200 java source files
~12 000 lines of code+ 6 000 lines of javadoc
![Page 6: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/6.jpg)
Junit History : 3 < 4 < 5
Junit5 in alpha versionJunit 4
supports Java 5 Annotations
@Test public void foo() {}
No extends TestCase
Junit 3
class MyTest extends TestCase {
public void testFoo() { Assert.assertEquals(...); }
}
The code has not changed for years (annotation with Java 5)
2005java5
2002Junit 3.8.2
2006Junit 4
20161997Junit
2015java8
![Page 7: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/7.jpg)
Small but Powerfull
“Never in the field of software development was so much owed by so many to so few lines of code.”
Martin Fowler
![Page 8: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/8.jpg)
De Facto Standard
Used by ~30% majorGithub projects
Integrated in ALL Tools
![Page 9: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/9.jpg)
Junit impacts .. eXtreme Programing, TDD, BDD,
Refactoring, Clean Code, Mock, IOC Injection ...
1997
JUnit
http://wiki.c2.com/?TenYearsOfTestDrivenDevelopment
2000
TDD
2001
Continuous Integration, Maven
Mock Objects - library
2002
Junit in Eclipse
Springframework
BDD Behavor Driven
20051999
Refactoring
Junit.org
Extreme Programming
http://www.martinfowler.com/bliki/Xunit.html
![Page 10: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/10.jpg)
xUnit
Junit … J=Java
but not only Java …
xUnit = ports in all langages
Standard in ALL langages
![Page 11: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/11.jpg)
http://junit.org/junit4/
![Page 12: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/12.jpg)
https://github.com/junit-team/junit4
![Page 13: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/13.jpg)
http://junit.org/junit5/
![Page 14: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/14.jpg)
https://github.com/junit-team/junit5
![Page 15: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/15.jpg)
Getting Started : New ProjectEclipse + Maven
![Page 16: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/16.jpg)
New Maven Project
![Page 17: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/17.jpg)
Blank Junit Project
source in src/main/java
tests in src/test/java
![Page 18: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/18.jpg)
JUnit = Unitary Class Test
1 class => 1 Test Class1 method => 1 Test method
SUT = System Under Test
![Page 19: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/19.jpg)
Example of System Under Test
This method is supposed to eval any JavaScript from JRE Does it work ??
![Page 20: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/20.jpg)
Let's Test It – Start Small, Trivial
At least, it should not break(but it could be anything else than JavaScript)
It looks UglyIt looks real JavaScript
![Page 21: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/21.jpg)
Junit in Eclipse
![Page 22: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/22.jpg)
Let's Run It
![Page 23: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/23.jpg)
Junit Result View
![Page 24: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/24.jpg)
Launch Shortcuts in Eclipse
F11 = execute(On test, on main, on launch target..)
Shift+Alt+D T (=debug test)
CTRL + R (see next: MoreUnit)
![Page 25: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/25.jpg)
Junit Results – OK / Assert / Failure
![Page 26: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/26.jpg)
Run All package Tests
![Page 27: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/27.jpg)
Junit in Maven
![Page 28: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/28.jpg)
Junit dependency in Maven pom.xml
“jar” project => built-in supports for compile + compile-test + test +jar ...
Junit.jar test compile dependency
![Page 29: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/29.jpg)
Junit = built-in in Maven
$ mvn install
# test only:$ mvn test
![Page 30: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/30.jpg)
Skip Tests in Maven
# all but test:$ mvn install -DskipTests
In ~/.m2/ settings.xml
![Page 31: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/31.jpg)
Test Phase in Maven
Phases:- resources- compile- compile -test- test
- jar-install
![Page 32: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/32.jpg)
Junit error => Build Failure
… (truncated )
![Page 33: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/33.jpg)
MoreUnit Eclipse Plugin
![Page 34: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/34.jpg)
Junit Naming Conventions
A class “App” in package “a.b.c”in src/main/java
“AppTest” in same package “a.b.c”in src/test/java
![Page 35: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/35.jpg)
Eclipse .. Switching from src to test
CTRL + Jsrc/main src/test
CTRL + U(first to generate)
![Page 36: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/36.jpg)
Install Eclipse MoreUnit
![Page 37: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/37.jpg)
Eclipse MoreUnit plugin
CTRL + J
![Page 38: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/38.jpg)
MoreUnit – Missing Tests Methods
CTRL + U
![Page 39: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/39.jpg)
InfiniTest Eclipse Plugin
![Page 40: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/40.jpg)
InfiniTest Installation
![Page 41: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/41.jpg)
InfiniTest Status Bar
InfiniTest Status Bar
![Page 42: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/42.jpg)
Save => InfiniTest runs TestsTest Fails = Compile Error
![Page 43: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/43.jpg)
Slow Test => infinitest.filters
![Page 44: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/44.jpg)
EclEma Eclipse Plugin
![Page 45: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/45.jpg)
EclEmma Installation
![Page 46: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/46.jpg)
Ecl Emma = Code Coverage
Run with Coverage
Shift+Alt+E T
![Page 47: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/47.jpg)
Code Coverage %
![Page 48: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/48.jpg)
Testability Principles
![Page 49: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/49.jpg)
How to Unit Test a System with Dependencies ?
![Page 50: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/50.jpg)
“Unit” Test = Isolated Unitary Test
System Under Test
Dependency1
Dependency2
Test that onlyNot that ...
![Page 51: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/51.jpg)
… Difficult to Test …use @Override if not final
![Page 52: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/52.jpg)
Use MockObjects
System Under Test
MockDependency1
Dependency2
Test that only
Replace by Mock for Testing...
Dependency1
MockDependency2
![Page 53: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/53.jpg)
Testability PrinciplesIOC = “Inversion Of Control” / DI = Dependency Injection
No hard-coded dependenciesNo “new”
No “Static”No “final”
No explicit implementation dependencies
Hollywood principle: “don't call me, I will call you”Inversion of Control
I need your interface only
![Page 54: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/54.jpg)
Use Dependency Injectionby Constructor
![Page 55: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/55.jpg)
Or Field Injection by Annotation
![Page 56: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/56.jpg)
Mockito Library
![Page 57: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/57.jpg)
@Mock + @InjectMocks
The SUT is injected its dependencies with @InjectMocks
Each Mocked dependency is createdwith @Mock
… equivalent to “Mockito.mock(MyXX.class)”
![Page 58: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/58.jpg)
@RunWith(MockitoJUnitRunner.class)
Where the magic starts … (from Junit runner)
Otherwise ..Unless interpreted, annotation are just as javadoc
Junit understand to start a Mockito Test
![Page 59: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/59.jpg)
Mockito Test Example
![Page 60: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/60.jpg)
Springframework Test Library
![Page 61: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/61.jpg)
Spring = THE IOC Library for Java
● DE FACTO Standard for IOC in Java● Others impementations:
– Guice, Plexus, EJB (seriously?), ...
![Page 62: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/62.jpg)
Upgrade code to Springframework
1/ Add springboot-parent + spring-* pom.xml
2/ Add @Component to managed bean classes
3/ Add @Configuration (with @ComponentScan)
![Page 63: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/63.jpg)
@Inject SUT (with real Dependencies...)
There is NO Mock here !!This is an Integration Test, not a Unit test
The SUT is injected its dependencies with @Inject
![Page 64: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/64.jpg)
@RunWith(SpringJUnit4Runner.class)
Where the magic starts … (from Junit runner)
Otherwise ..Unless interpreted, annotation are just as javadoc… like Mockito
Junit understand to start a Spring Test
Springframework understand its configuration
![Page 65: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/65.jpg)
Run Test with Spring
![Page 66: Presentation & Tools (Eclipse, Maven, Mockito, Spring ...arnaud-nauwynck.github.io/docs/CoursIUT-JUnit.pdf · a Mockito Test. Mockito Test Example. Springframework Test Library. Spring](https://reader031.vdocuments.net/reader031/viewer/2022022012/5b206c8c7f8b9a36668b50f9/html5/thumbnails/66.jpg)
Conclusion
● Junit ecosystem is amazing – Junit, Maven, Eclipse, Mockito, SpringFramework
all works together
– TDD - For better code
● Questions ?– [email protected]
● This document:http://arnaud-nauwynck.github.io/lessons/CoursIUT-JUnit.pdf