diff --git a/lectures/revealjs/18-lecture-integration-testing.adoc b/lectures/revealjs/18-lecture-integration-testing.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..765412f3203592094f156f1525003646e1d85f47
--- /dev/null
+++ b/lectures/revealjs/18-lecture-integration-testing.adoc
@@ -0,0 +1,106 @@
+= Integration testing 
+:customcss: slides.css
+:icons: font
+:includedir: includes/
+:LECTURE_TOPIC: Integration testing 
+:LECTURE_NO: 18th Lecture
+
+include::{includedir}header.adoc[]
+
+[.smaller-80][.center-paragraph]
+IT1901 Fall 2021 - {LECTURE_NO}
+
+
+[background-color = "#124990"]
+[color = "#fff6d5"]
+== Testing
+
+- is an important part of software development
+- a way to ensure software quality
+- automated testing allows to develop new features with a minimal effort to check if the software still works as expected
+- testing frameworks  
+
+== Testing principles
+
+- testing shows presence of defects (not their absence)
+- testing all possibilities is not feasible
+- testing should be started as early as possible
+- testing depends on the context
+
+== Levels of testing
+
+- Unit testing
+- *Integration testing*
+- System testing
+- Deployment testing
+
+
+== Unit testing
+
+- units are the smallest testable parts of our system (methods, classes)
+- unit tests are concerned with testing the unit in isolation
+
+== Integration testing
+
+- integration testing aims at testing several units / components 
+- the size and complexity of such a test is on a spectrum and can be from just integrating 2 units to integrating nearly all components in the system
+
+== System testing
+
+- testing the complete system as whole
+- it can be considered a fully integrated test as it integrates all the components within the said system
+- checks if the system is compliant with the specified requirements
+
+== Deployment testing
+
+- tests the complete system as it would be for actual use
+- complete system should comply with the requirements in the clients' environment
+
+== Testing pyramid
+
+image::../images/lecture18/test-pyramid.png[canvas, size=contain]
+
+== Testing pyramid (2)
+
+- as we go from the bottom towards the top the tests get more complex and resource intensive
+- the pyramid is a useful reminder that we should have many unit tests,  several integration tests and very few system and deployment tests 
+
+== System-Tiers-Layers-Modules-Components-Units
+
+image::../images/lecture18/system-units.png[canvas, size=contain]
+
+== Unit tests 
+
+image::../images/lecture18/system-units.png[canvas, size=contain]
+
+== Integration tests 
+
+image::../images/lecture18/integration-tests.png[canvas, size=contain]
+
+== Types of integration testing
+
+- "Big Bang" - all of units available are combined together and tested if they work together as intended
+- "Top-Down" - top-down integration allows the team to test the top level units first (stubs)
+- "Bottom-Up" - test the bottom level units first (drivers)
+- "Hybrid" -   a combination of both top-down and bottom-up integration testing
+
+== Isolating parts of the system
+
+- to be able to reliably and automatically test parts of the system we need to isolate them
+- the parts need to have a clear contract (the interface used to interact and communicate)
+- when parts of the system that the unit / component we want to test depends upon are not implemented these need to be simulated
+- a simulated component is usually referred to as a mock, stub or fake  
+- when the simulated component is using / calling the tested component it is called a driver
+  
+== Simulating parts 
+
+image::../images/lecture18/mocked-server.png[canvas, size=contain]
+
+
+== Simulating parts (2) 
+
+image::../images/lecture18/mocked-client.png[canvas, size=contain]
+
+
+
+include::{includedir}footer.adoc[]
\ No newline at end of file