The Ultimate Guide to Android Testing (Unit Tests, UI Tests, End-to-End Tests) - Clean Architecture

  Рет қаралды 118,156

Philipp Lackner

Philipp Lackner

Күн бұрын

Пікірлер: 132
@bmwr69s19
@bmwr69s19 3 жыл бұрын
Phillipp, you decided to destroy me. I don't do almost anything but watch your videos. I absolutely fell in love💘💘 . You are the best teacher in the world! Thank you very much!
@PhilippLackner
@PhilippLackner 3 жыл бұрын
❤️❤️❤️
@joemoe5954
@joemoe5954 3 жыл бұрын
This is exactly the content KZbin is lacking ! Thank you for making this !
@mikec4220
@mikec4220 2 жыл бұрын
28:44 that was the perfect description of the feeling! :D:D Thanks for your work Phillip!
@ricardomuiambojunior4816
@ricardomuiambojunior4816 3 жыл бұрын
Thank god for your existence man.
@paulnjoroge6008
@paulnjoroge6008 3 жыл бұрын
Keep doing this. For sure you are helping many people out here.
@PhilippLackner
@PhilippLackner 3 жыл бұрын
That's the plan!
@buszi_
@buszi_ 3 жыл бұрын
It's so great that you cover such important topic, in our company a skill in Unit testing is even mandatory for Junior/Intern position, because it's so crucial to write tests (nobody will write them for you if you create a pull request), and so many candidates are rejected because of the lack of this skill Also it is amazing that you do so with one of your current poroject, many courses cover it as "I HaVe A hAmBuRgEr ClAsS, lEtS WrItE UnItTest", and the skill of testing on a living project is really crucial Huge +1 form me
@PhilippLackner
@PhilippLackner 3 жыл бұрын
Thanks a lot for the amazing feedback!
@buszi_
@buszi_ 3 жыл бұрын
I think you should do a followup video about Mocking (Mockito or Mockk) and verifying mocks, because I think that actually nobody uses "fake components"
@sepideh1085
@sepideh1085 3 жыл бұрын
I've just finished it . The more time passes , the more people realize the value of this video
@bhupenjoshi7599
@bhupenjoshi7599 3 жыл бұрын
You are doing a great job philipp... I am watching your videos again and again. Just in love with your way of explaining things...😘😘
@pankajsagar9550
@pankajsagar9550 2 жыл бұрын
if you want really gain knowledge about android it is right channel , I have learnt lot of from it thank you philipp
@sley664
@sley664 Жыл бұрын
Your tutorial are clean as your architecture ! Insane content, it save me a lot of times !
@mehdiparsaei1867
@mehdiparsaei1867 3 жыл бұрын
Amazing! Tanks a lot! Change : Unit Tests, UI Tests, End-to-End Tests => Unit Tests, Instrumented Tests, End-to-End Tests If you would prefer as well.
@PhilippLackner
@PhilippLackner 3 жыл бұрын
But every instrumented test I show here is a UI test
@BDCCN-NguyenKiemTan
@BDCCN-NguyenKiemTan 5 ай бұрын
@@PhilippLackner if I'm not mistaken, you already did the integration test by testing add notes (integrated with the in-memory room db)
@elijahonduso
@elijahonduso 3 жыл бұрын
Am late but not out. This is amazing. This was long overdue.
@genctasbasi
@genctasbasi Жыл бұрын
That's a priceless content there, clear & to the point. Well done.
@mintunandi1002
@mintunandi1002 3 жыл бұрын
Thank you. Love to see more video on Compose UI testing
@PankajKumar6493
@PankajKumar6493 Жыл бұрын
I'm getting Dagger duplicate binding error even after using UninstallModule on my AppModule in the test class. Do we need to do something more to fix this? How can it have duplicated binding when AppModule is already uninstalled fromt the test class
@Mreto17
@Mreto17 3 жыл бұрын
Man, thank you for uploading this video. This is really helpful to me
@morbix3683
@morbix3683 3 жыл бұрын
Holy ****! Thank you!!!! Philipp breaking the android community!!!
@PhilippLackner
@PhilippLackner 3 жыл бұрын
Thanks man!!
@sameershekhar1020
@sameershekhar1020 3 ай бұрын
Please make a video on unit testing with mockk. I am facing a lot of difficulty in learning it.
@luckydevil1601
@luckydevil1601 Жыл бұрын
Incredible testing content, thank you so much! I can't even. This is awesome!
@bjornk.567
@bjornk.567 2 жыл бұрын
Was nice to see how you do testing, thanks for sharing! Let me comment on what I noticed while watching: 1) When testing the GetNodes UseCase, you're faking the repository instead of the dao. This has the setback that the behavior of the fake might not mimic the actual repositories implementation, especially over time when your code and structure changes. When you refactor you repository code, you might change e.g. the semantics of getNodesById -- say for exception handling. When you have tests for your repository separately, you'll adjust them since they broke. But you'll certainly forget to adjust this UseCase test. This will result in this UseCase test becoming useless. Things will improve when you fake the dao, since changes to the semantics of the dao will happen less often -- and of course you'll find issues due to changed repository semantics. If you have concepts on your mind how to avoid that your UseCase test becomes useless following your presented test pattern because it's not updated on changes of dependencies, I'd be glad to hear about that. 2) Keep your tests as tidy as you keep your production code, the same principles apply -- especially DRY, so don't just copy&paste, it will give you headaches later. 3) Why are you using the @Throws annotation in your AddNote UseCase? Are you planning for Java interop?
@HappyLeoul
@HappyLeoul 2 жыл бұрын
I am also not liking how the composable are copied into the test class.We're basically maintaining the same code for the main code and the test code. How can you make It tidy and not copy the code?
@andrevitorpietro357
@andrevitorpietro357 2 жыл бұрын
Thanks again Philip! Amazing video again !
@roshanrai9089
@roshanrai9089 3 жыл бұрын
Was looking something like that you seem to know your audience very well !!
@PhilippLackner
@PhilippLackner 3 жыл бұрын
Hope you like it!
@AndrewDChristie
@AndrewDChristie 3 жыл бұрын
this was a very helpful video, learnt a lot about test structure,very useful for a developer new to testing
@PhilippLackner
@PhilippLackner 3 жыл бұрын
Glad it was helpful!
@Sc2MooDy
@Sc2MooDy 3 жыл бұрын
Amazing job, as always. Thanks
@muhammadsarimmehdi
@muhammadsarimmehdi 2 жыл бұрын
How do you test the delete notes usecase? It seems I would need to add an extra method inside the DeleteNotes usecase to return the repository and check whether the note is there or not
@techmarinar
@techmarinar 3 жыл бұрын
hey man , thank you very much , you really conquered our hearts, god bless you
@alwaysbrillant10
@alwaysbrillant10 2 жыл бұрын
Please can you make this same video but for projects making network calls? Projects that use coroutines and flow as well like this one
@tanjimahmed213
@tanjimahmed213 3 жыл бұрын
Thanks, Philipp for this Awesome video
@frankyjunior6005
@frankyjunior6005 3 жыл бұрын
finally thank you for your good explanation. easy to understand
@PhilippLackner
@PhilippLackner 3 жыл бұрын
Glad to hear that!
@pinoy_marites_beh
@pinoy_marites_beh 2 жыл бұрын
Hope you make a TDD video covering outside-in and classicist approach using uncommon convention where test classes are suffixed with the word "should".
@orangasli2943
@orangasli2943 2 жыл бұрын
1. So I already understand how to put the UI in the layout .. 2. Making the UI to be clickable 3. Making the UI to scroll And yes you're right that I need my build time to be faster.. And I am interested how to integrate unit test with a mocking object of the android components.. Hopefully I can finish this
@RezaZarchi
@RezaZarchi 5 ай бұрын
hi Philipp. you used `TestInstallIn` annotation and `replaces` in your recent test cources and, you didn't use `UninstallModule` there. What is the difference between these methods?
@RezaZarchi
@RezaZarchi 5 ай бұрын
I also realized that redefining Compose and its navigation stuffs in the setUp function is no longer necessary. createAndroidComposeRule starts the activity already, and Compose components are ready to test there.
@GG9K71
@GG9K71 Жыл бұрын
Very important and usefull video!
@okeuwechue9238
@okeuwechue9238 2 жыл бұрын
In Android Studio are there any limitations in using AndroidX&Junit5 for instrumented tests?
@mandroidx1474
@mandroidx1474 3 жыл бұрын
I feel like i won lottery ,thanks phillip 💚💚
@PhilippLackner
@PhilippLackner 3 жыл бұрын
Thanks!! Glad it helps
@abhilashpatel559
@abhilashpatel559 2 жыл бұрын
Basically iam a single web application tester in my company. As part of the new project they assigned me as Android tester so just guide me What's the exact thing to do in this . They just telling to test Android devices. As part of KT They just delivered some kind of stuff but unfortunately idint get it . CTS VTS GTS. Iam fully confused that what they actually talking about .... Finally make a video from Scratch who is starting their carrier as Android testing Thank you 😊
@enzoteles2037
@enzoteles2037 3 жыл бұрын
I love you phillipp, you are the best of the world, tks
@yusufsafrudin7533
@yusufsafrudin7533 Жыл бұрын
great video, can you make testing for viewmodel using stateflow
@hassanjamil841
@hassanjamil841 Жыл бұрын
I got the required knowledge for different types of android application tests, the video is just amazing and you really doing a very great job doing your huge efforts in making this free up to dated content for the android developers, I am really happy following or subscribe your channel, keep it up boy, Salute 🫡
@suren6413
@suren6413 3 жыл бұрын
You are the best. I have learned a lot by your tutorials. Can you please upload a video for all Functional Tests, Unit Test, instrumentation test and UI test in Java. ? Even if it's a paid version, it is ok.
@weaponx3373
@weaponx3373 Жыл бұрын
thanks, learned a lot !!
@Joe-yu9wc
@Joe-yu9wc 2 жыл бұрын
Hi Man, do you have premuim testing course?
@i_fahimkhan
@i_fahimkhan 3 жыл бұрын
Hi, Phillip, I have a question, I have a production-level project but it does not contain any tests so if I were to implement unit tests in that same project can I add the tests to the production level directly or I should create a separate project for tests that will be separate from production also what is the industry standard? and thank you for reading it.
@astatalol
@astatalol 3 жыл бұрын
Hi man, not Philip but the tests should be on the same project, on the com.test directory for unit tests and com.androidTest for the Instrumentation tests and UI tests, hope this helps.
@janbrs7040
@janbrs7040 Жыл бұрын
and afaik, the directory hierarchy (inside the test directory) should be same as the production one.
@haykmkrtchyan7093
@haykmkrtchyan7093 3 жыл бұрын
Man you're an Android beast)))
@cybersnake
@cybersnake 3 жыл бұрын
Aw yeeessss an update! 😎
@pereyrarg11
@pereyrarg11 Жыл бұрын
thanks for sharing!
@nilayparikh6693
@nilayparikh6693 3 жыл бұрын
Hey philip I have enjoyed this video and please make one video with adding AI in application
@Nick-cx4rs
@Nick-cx4rs 2 жыл бұрын
Awesome tutorial thank you rly.
@johndominicjasmin
@johndominicjasmin 3 жыл бұрын
Wow thank you so much♥️♥️
@sohirhashem7218
@sohirhashem7218 8 ай бұрын
you are the best 🥰🥰thank you so much
@kareemkamal6185
@kareemkamal6185 3 жыл бұрын
hey, in Spotify play list in video 13 there are more than 10 person have the same problem in comment of "@Quang Đạt" please if anyone can help tell us if u can't set Like to make philipp see it please..
@winsonmac
@winsonmac 2 жыл бұрын
Thank you very much!
@moeabushawish9567
@moeabushawish9567 3 жыл бұрын
Hey Philipp, sorry if you mentioned this before but are you gonna make either Flutter, React Native, or KMP tutorials? I love you're well-paced and properly architectured teaching style. I've had enough of other tutorials that teach you how to make a todo list app in 5 minutes all in one class. I want a professional, longer, well-pace, and architectured multiplatform tutorial.
@muhammadsarimmehdi
@muhammadsarimmehdi 2 жыл бұрын
how would you just test the view model here? I tried mocking the SavedStateHandle but I get an error about duplicate bindings (I just bind the SavedStateHandle in the TestAppModule object class)
@PhilippLackner
@PhilippLackner 2 жыл бұрын
You don't need to bind the SavedStateHandle. Hilt will automatically provide it.
@anandharajramasamy816
@anandharajramasamy816 2 жыл бұрын
Great work! ,Could you please include webview UI test case in jetpack compose
@BCSLalBihariPandey
@BCSLalBihariPandey 3 жыл бұрын
Please please make a detailed video on Bound Services.
@baselnat93
@baselnat93 3 жыл бұрын
one question. when to use fake objects and when to use mockk to mock objects?
@PhilippLackner
@PhilippLackner 3 жыл бұрын
mock objects make sense when you have something with tons of functions. Implementing a fake for that would require you to write an implementation for all these functions. With a mock you only implement the ones needed. Most of the times, mocks actually make more sense
@rafaelalberto8689
@rafaelalberto8689 3 жыл бұрын
Great job!!
@PhilippLackner
@PhilippLackner 3 жыл бұрын
Thank you!
@venkatesh4307
@venkatesh4307 3 жыл бұрын
Thank you very much 🥰
@themateoo
@themateoo Жыл бұрын
It's 2023 and I can't run this project with latest versions of... all the stuff that it's using. I spend half a day and still no success. This is crazy.
@devOmarAZ
@devOmarAZ 3 жыл бұрын
Thanks Philip very mush
@sudarshanh.s.521
@sudarshanh.s.521 Жыл бұрын
I am late to this video, Code is very hard to build now. Can you update code base.
@Ilamarea
@Ilamarea 2 жыл бұрын
The instrumented test fails, it can't find a view with given tag. useUnmergedTree = true does not help. Adding a delay does not help. Using tags the same way on other views works fine. assertExists also fails. Any ideas? e/ Also the EndToEnd test fails because it's missing focus on the first action. [e: No input session started. Missing a focus?] Think update to composable introduced focusModifier?
@mehranbehbahani3050
@mehranbehbahani3050 3 жыл бұрын
28:43 made me laugh out loud! It is true though.
@vimalshanmugam9046
@vimalshanmugam9046 3 жыл бұрын
Plzz make video on binding adapter Philipp 🙌🏻
@muhammadsarimmehdi
@muhammadsarimmehdi 2 жыл бұрын
Reason: Expected exactly '1' node but could not find any node that satisfies: I am following the same steps as you for my composable but still getting this error. In my composable, however, I call other composables and the node with the tag is located in one of them
@onuremrekaradag
@onuremrekaradag Жыл бұрын
It seems that you've assigned the tag to the OrderSection's Modifier and forgot to use that passed modifier inside OrderSection. As a result, the node not be present in the tree and causing the test to fail.
@arthurdamous
@arthurdamous 3 жыл бұрын
Thank you very much
@trollberserker1515
@trollberserker1515 11 ай бұрын
The setup boilerlate is huge for the instrumented tests.
@emmanuelmtali1594
@emmanuelmtali1594 2 жыл бұрын
It's the orga*m part for me. Hahahahaha love your tutorials
@ProvakorKonik
@ProvakorKonik 3 жыл бұрын
Awesome love you
@baselnat93
@baselnat93 3 жыл бұрын
thanks for the video
@PhilippLackner
@PhilippLackner 3 жыл бұрын
You're welcome
@chuka_obi5167
@chuka_obi5167 2 жыл бұрын
Thanks for your video Philipp! This was very educational and I learnt a lot from it. For some reason, during my Integration section following the tutorial, I kept on getting the error "java.lang.AssertionError: Failed to perform isDisplayed check. Reason: Expected exactly '1' node but found '4' nodes that satisfy: (TestTag = 'ORDER_SECTION')" for the function clickToggleOrderSection_isVisible. Not sure what I am doing wrong
@onuremrekaradag
@onuremrekaradag Жыл бұрын
It seems that you've assigned the tag to the OrderSection's Modifier and forgot to use that passed modifier inside OrderSection. As a result, the node not be present in the tree and causing the test to fail.
@malikkahfi2534
@malikkahfi2534 3 жыл бұрын
Thanks 😘
@squale1343
@squale1343 Жыл бұрын
The unexpected uss of the word "orgasm" got me 😂
@chenchiaho
@chenchiaho 3 жыл бұрын
How to properly run your source code? I like all your tutorials, but I actually never successfully run any of them...
@nabazbarzanji3221
@nabazbarzanji3221 3 жыл бұрын
Wow Perfect
@devOmarAZ
@devOmarAZ 3 жыл бұрын
if you refactor this great app to multi module it will be our document to architect our apps ... thx
@mrdrugdesigner
@mrdrugdesigner Жыл бұрын
Thanks Phillip for this amazing content.
@rohanr4783
@rohanr4783 3 жыл бұрын
Sir please make a video on how to Use FIREBASE with Jetpack Compose
@PhilippLackner
@PhilippLackner 3 жыл бұрын
The same way you used it before. Only the ui layer changed with compose which firebase has nothing to do with
@ediotTV
@ediotTV 3 жыл бұрын
Love you Sir....
@PhilippLackner
@PhilippLackner 3 жыл бұрын
I love you too, Donald
@ediotTV
@ediotTV 3 жыл бұрын
@@PhilippLackner sir can you please tell me the the shortcut to see the suggestions popping in methods
@imnithish
@imnithish 2 жыл бұрын
🔥
@CybercoderNaj
@CybercoderNaj 3 жыл бұрын
I love that in your testing videos, when your tests fail, you think there is something wrong with the test function. 😂😂😂 Pretty ironic.
@PhilippLackner
@PhilippLackner 3 жыл бұрын
😂😂
@unknwn05
@unknwn05 3 жыл бұрын
Y O U A R E T H E B E S T
@bejancorneliu4238
@bejancorneliu4238 Жыл бұрын
How to test with real rest api? Let say my screen needs to perform api request? How to make unit test wait for api to finish?
@undeadredemption_
@undeadredemption_ Жыл бұрын
28:41 🤣🤣🤣🤣
@ytmiva2
@ytmiva2 3 жыл бұрын
Please don't teach to add randomisation in unit tests. Other than that, there is a lot of useful info here. Thanks for the video!
@RonnyBeeeeee
@RonnyBeeeeee 3 жыл бұрын
Your explanation is wrong. Unit tests don't test a component class or function but a feature. This is the big misunderstanding which is also mentioned by Uncle Bob. Implementation details like inner classes should never been tested separately but tested as a black box. Tests should trigger your ViewModel and expect an effect on your ViewState, Database or Http-Request. You never should test something in between!
@dontforgettovote531
@dontforgettovote531 3 жыл бұрын
it would be super cool if you could a video like this one kzbin.info/www/bejne/f6ephH2Miax3mJY, basically refactoring the app to use modules instead.
@samdroid37
@samdroid37 2 жыл бұрын
getting this error. please help. -> android.content.ActivityNotFoundException: Unable to find explicit activity class {com.samm.brewerysearch.test/androidx.test.core.app.InstrumentationActivityInvoker$BootstrapActivity}; have you declared this activity in your AndroidManifest.xml, or does your intent not match its declared ?
@carlosmartinezsuarez3541
@carlosmartinezsuarez3541 10 ай бұрын
As always... what a crack
@duckieDidIt
@duckieDidIt 3 жыл бұрын
down voting way too many ads
@mikec4220
@mikec4220 2 жыл бұрын
Well - the guy has to make his money from this somehow - you know how much time it takes to make such good quality content? Cmon - your comment is disrespectful!
@duckieDidIt
@duckieDidIt 2 жыл бұрын
@@mikec4220 there are plenty of people who make money on KZbin without excessive ads 🤷🏽‍♂️
@mikec4220
@mikec4220 2 жыл бұрын
@@duckieDidIt instead of putting such comments just install an add blocker and that will solve your issue.
@duckieDidIt
@duckieDidIt 2 жыл бұрын
@@mikec4220 it’s called the freedom of speech you should learn a thing or two about it
@mikec4220
@mikec4220 2 жыл бұрын
@@duckieDidIt and you should learn a thing or two about respecting other peoples work ;)
@arturolatorre371
@arturolatorre371 2 жыл бұрын
Anyone gave this a try? I get an error when I run the Integration test, the trace says: Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':app:debugAndroidTestRuntimeClasspath'
@BCS_AAMIRASHRAF
@BCS_AAMIRASHRAF 7 ай бұрын
instead. of composerule.setcontent do composerule.activity.setcontent
@vladk3524
@vladk3524 Жыл бұрын
composeRule.activity.getString(resId = R.string.my_string)
Unit тестирование в Android c Clean architecture
21:09
Тимофей Коваленко
Рет қаралды 13 М.
5 Fatal Coroutine Mistakes Nobody Tells You About
18:15
Philipp Lackner
Рет қаралды 90 М.
СИНИЙ ИНЕЙ УЖЕ ВЫШЕЛ!❄️
01:01
DO$HIK
Рет қаралды 3,3 МЛН
Tuna 🍣 ​⁠@patrickzeinali ​⁠@ChefRush
00:48
albert_cancook
Рет қаралды 148 МЛН
1% vs 100% #beatbox #tiktok
01:10
BeatboxJCOP
Рет қаралды 67 МЛН
MVVM vs. MVI - Understand the Difference Once and for All
18:40
Philipp Lackner
Рет қаралды 58 М.
10 Signs Your Software Project Is Heading For FAILURE
17:59
Continuous Delivery
Рет қаралды 41 М.
DeepSeek is a Game Changer for AI - Computerphile
19:58
Computerphile
Рет қаралды 1,3 МЛН
AI Is Making You An Illiterate Programmer
27:22
ThePrimeTime
Рет қаралды 270 М.
Android Testing ViewModel - Common problems
11:30
Renaro Santos
Рет қаралды 8 М.
Make Your Code Clean With the SOLID Principles
18:24
Philipp Lackner
Рет қаралды 103 М.
Dagger-Hilt vs. Koin vs. Manual Dependency Injection - Pick THIS
21:27
СИНИЙ ИНЕЙ УЖЕ ВЫШЕЛ!❄️
01:01
DO$HIK
Рет қаралды 3,3 МЛН