Android TDD Masterclass - Coroutines, Jetpack
- Description
- Curriculum
- FAQ
- Reviews
The TDD Masterclass by Petros Efthymiou.
Learn State of the Art Android development by building a real production app.
Are you following dozens of forums, articles and buying courses in order to move your development skills and career to your next level?
I am too, but more often than not, after completing them I realise that there is still a HUGE amount of work left to be done, to connect all the pieces together and make them work on a real application. I found that even though a course was providing comprehensive knowledge on coroutines it didn’t mean that I knew how to integrate them with Retrofit, Live data or Hilt. And because another course was extensive on Test Driven Development after completing it I didn’t know how to write an application with TDD using the latest Android tech stack.
After buying courses, reading articles & forums and a couple of months of hands-on practise I have finally learned how to combine Android 11 best development practises in an Android application.
I created this course to make the process easier for you! You are going to learn how to combine
-
Kotlin
-
Coroutines
-
Live Data
-
Kotlin Flow
-
Retrofit
-
Hilt
-
Jetpack Navigation
-
MVVM
And complete a real Android application purely on Outside-In Test Driven Development
You are going to learn how to write not flaky espresso tests in a real scenario with delays and HTTP calls, without using Thread.sleep(). After all we wouldn’t be doing TDD without efficient & effective Espresso UI tests!
Why Me?
Even though I am new to Udemy I am not new to the industry. I have been working as an Android engineer from junior to lead positions in ambitious startups & large multinational companies for about 8 years. Being a good engineer though doesn’t automatically mean that you are a good Instructor as well.
In the past 5 years I have also discovered my passion for education and worked as a Software Instructor in several colleges and companies, including New York College, Hellenic American Union and my current position now is a Mobile Trainer in a Multinational company called Backbase, where I am training
-
The internal RnD engineers
-
The internal professional services engineers
-
External third party integrators
In my lifetime I have trained thousands of developers both in classroom, web conferences and video courses.
Why is it important?
As we are advancing to more senior engineering levels we realise that how we do things is equally important to getting them done. The industry has started to realise that a serious Software Engineering company cannot anymore base the products in purely architectures and engineering practises.
I often say that there are 3 stages in the advancement of an engineer
-
In the first stage he/she is a programmer. He is learning how to make things work e.g. how to add buttons in an Android application and handle it’s click. But is not aware of the importance of doing things well. He or she cannot realise that a purely structured system is certain to backfire in the long run and while everything initially seemed to be going well, “suddenly” it is impossible to work with this system anymore. New features are hard to be added, and bugs very often slip to production code
-
In the second stage having realised the past mistakes the professional starts practising and learning good engineering patterns. He or she starts exploring things like :
-
SOLID Principles
-
Design patterns
-
Clean architecture
-
Separation of concerns
-
Low coupling, High cohesion
-
Unit Testing
and if is passionate and dedicated enough manages to reach a more senior level and is able to develop systems that can be successful not only in the short but also in the long run
-
-
The final stage is the Mastery. This stage is an ongoing process and doesn’t ever end. After the engineer has a good understanding of the above practises he realises there is a huge room of improvement. He learns how to apply them and most importantly when they are not required and simpler-junior level approaches are more beneficial for the specific project/situation. In other words it is a constant effort to learn how to never
-
Under-Engineer
-
Or Over-Engineer.
He or she also comes in touch with more advanced practises like Test Driven Development which takes quite a lot of effort to get a grasp and master it.
-
In this course I will do my best to advance you in this path. I will offer to you what I have learned on my journey and I am also very open to learn from you. I am always available on the forums to support and discuss topics that you might have a different point of view and this way we can help each other on our endless road in Software Mastery.
-
3Section Intro
-
4What is TDD
Let's discuss what TDD is.
-
5Advantages of TDD
-
6Platform Independent
-
7TDD Lifecycle
-
8What is a Test
Let's touch base on what is a Test
-
9Writing Our First Unit Test
-
10Solution: Second Unit Test
The solution to the exercise
-
11Rate the Course
-
12Test Preconditions
What characteristics make a Test valuable?
-
13Types Of Automated Tests
Let's discuss of all the different types of automated Tests
-
14Google Testing Pyramid
Discussing Google's suggested testing strategy
-
15Types of TDD
How many TDD types exist?
-
16Classicists VS Outside-In TDD
Pros & Cons of TDD types
-
17And The Winner Is..
Which is our favourite TDD flavour?
-
18Outside-in TDD Lifecycle
One additional step
-
19Our first system using TDD - Requirements
The requirements of the first system that we are going to develop using outside-in TDD
-
20Failing Acceptance Test
In this video we are going to write our first failing acceptance test that validates the system behaviour
-
21First TDD Cycle Completed
In this video we will complete the first inner TDD cycle
-
22Second Failing Acceptance Test
Let's write the second acceptance test for the second part of our desired system behaviour
-
23Car Inner TDD cycle
In this video we are going through the whole Inner TDD cycle for the Car class.
-
24Engine Inner TDD cycle
In this video we are going through the while Inner TDD cycle for the Engine class
-
25Green: Acceptance Test
Finally we complete the whole implementation of our system and our Acceptance Test is passing !
-
26TDD Quiz
What you learned regarding TDD?
-
27Section Closing
-
28Section Intro
-
29What Problems Do Coroutines Solve?
Let's discuss what problems do coroutines solve & why do we need them
-
30Suspend & Resume
Explaining 2 new operations, the Suspend & Resume
-
31Examining How Coroutines Work
Let's see what happens in the background while we write straightforward sequential code
-
32Main Safety With Coroutines
How do coroutines achieve Main Safety?
-
33Structured Concurrency
Let's discuss an important concept called structured concurrency
-
34Coroutines Practical Example
Let's see coroutines in practise !
-
35Testing Coroutines
Learning how to write unit tests for Coroutines
-
36Kotlin Flow
Reactive Programming with Kotlin Flow
-
37Advantages of Kotlin Flow
Let's discuss the advantages of Kotlin Flow VS Rx
-
38Kotlin Flow in Practise
Let's get some hands on experience using Kotlin Flow
-
39Unit Testing Kotlin Flow
Let's see how can we unit Test a Kotlin Flow
-
40Closing The Implementation
In this video we are closing up the implementation of our example system
-
41Coroutines Quiz
-
42Section Introduction
-
43Working Agile
Let's discuss the basic principles that will enable us to deliver fast, high quality code
-
44Application Requirements
Let's discuss the requirements of our MVP Android application
-
45Setting up our Backend
We are going to use Mockoon in order to make a real Backend environment on our localhost
-
46Setting up our Android Application
Please download the start application attached to this video
-
47First Acceptance Test Passing
Our first acceptance test is passing !
-
48Playlists failing acceptance test
Implementing the failing Acceptance test for our playlists list
-
49Minimum Viable Architecture
Let's discuss an interesting concept that I like to call Minimum Viable architecture
-
50Starting with the UI
Creating the user interface for our playlists feature
-
51Playlist Fragment Implementation
Implementing the Fragment
-
52Finishing up the View Layer
Finishing the development cycle for the view layer.
-
53Red: ViewModel Unit Test
Writing the first red unit test for our ViewModel layer
-
54Green: First VM Unit test
-
55Green: VM Emitting Playlists
We are turning the second unit test of our VM Green!
-
56Refactoring Phase
Never forget to refactor both the production & the test code
-
57Testing Error Cases
It is very important to also test how our system is applying error handling
-
58Implementing The Repository Layer
Starting the inner TDD cycle for the Playlist Repository
-
59Repository Layer (Cont)
In this video we reach the Green state for the emitPlaylistsFromService Test!
-
60Wrapping up the Repository
Finishing with the repository layer, do not forget that we must also implement the error handling!
-
61Exercise: Service
-
62Green: First Service Test
We are turning green the first desired behaviour of our Service Test
-
63Green: Second Service Test
-
64Green: Third Service Test
Let's complete the implementation of our service layer by testing the error handling
-
65Wrapping up the Playlists Feature
-
66Section Intro
-
67Dependency Injection Explained
Let's first make sure that we understand what dependency injection is
-
68Pros of using DI
Let's discuss the advantages of using dependency injection in your project
-
69Introduction to Google HILT
Let's discuss Google's HILT DI library and why it is the best choice currently for an android application
-
70Evaluating our situation
Evaluating our situation and what dependency injection means to our project
-
71Download HILT
Let's include the HILT library to our application
-
72Integrating HILT
Let's learn the steps to perform dependency injection using the HILT library
-
73Finishing HILT Integration
In this video we are going to finish the HILT library integration
-
74Testing the Application
Let's test the behaviour of our application after integrating HILT
-
75Dependency Injection Quiz
-
76Section Closing
-
77Section Intro
-
78Requirements Change
After demo-ing the application to our team we are receiving some improvements from our Product Owner
-
79Failing Acceptance Test
Starting off with the failing acceptance test for our improvement as always
-
80Green: Acceptance Test
Implementing the first part of our improvement
-
81Loader Hiding, Failing Acceptance Test
Correcting broken past behaviour and implementing the second failing acceptance Test.
-
82Completed Loader Feature
Completed the whole implementation of the loader functionality
-
83Rock Image, Failing Acceptance Test
Writing the first failing acceptance first for our second improvement
-
84Upfront Design
Let's discuss what is the best way to add business logic inside our application
-
85Red: Failing Repository Test
We need to refactor our system to make to map the PlaylistsRaw to Playlists before we proceed with our second improvement
-
86Green: Repository Using Mapper Test
We need to make sure that the repository is delegating the playlist mapping
-
87Green: Whole Repository Suite
Finished the repository implementation
-
88Green: First Mapper Test
Now let's focus on implementing the business logic with the mapper
-
89Green: Playlist Mapper TDD cycle
Going through the rest of the TDD cycle for our mapper
-
90Green: Acceptance Test!
Getting the green light for the second improvement
-
91Bonus: Removing Thread Sleep From Espresso Tests