Spring Boot Testing a REST Controller with Unit, Integration & Acceptance Tests

Sdílet
Vložit
  • čas přidán 11. 09. 2024
  • In this video we will be testing a Spring REST controller. We will be writing a full test suite with unit tests, integration tests & acceptance tests. We will be using JUnit5, Mockito, MockMvc & more. We will also be discussing the purpose of each type of test with their advantages & disadvantages.
    Source code: github.com/kri...
    Spring Initialiser: start.spring.io/

Komentáře • 68

  • @KrisFoster1
    @KrisFoster1  Před 3 lety +23

    Unit testing starts: 1:40
    Integration testing starts: 11:25
    Acceptance testing starts: 21:50

    • @arihantdhobe
      @arihantdhobe Před 2 lety

      What do I need to do If I am writing a Batch Scheduler 15:08

  • @blankvoidsea
    @blankvoidsea Před 3 lety +7

    No more hours of scouring the Internet, this here is the good deal. Thanks!

  • @malg5547
    @malg5547 Před 3 lety +16

    This is the clearest video i've seen on this topic. Thanks for the tutorial, was really helpful.

  • @xamael1989
    @xamael1989 Před 2 lety +2

    Sincerely brother thanks for taking the time to make this tutorial its very clear and straight forward much love and appreciation from Tanzania

  • @federicobau8651
    @federicobau8651 Před rokem +1

    5 min in and the video is way way more valuable than an entire series of some other youtubers that I wont name. I am an experienced programmer working with different languages and learning now java, but I can recognise who is really a developer and who is just a youtuber influencer with not real experience but the RGB keyboard and few screen unfortunally makes it look like they do. I can tell you are a real seasoned developer ! Either way thanks for these videos

  • @madhanwilliams1464
    @madhanwilliams1464 Před 2 lety +3

    This video gave me a confidence to do unit and integration testing in my project. Thanks for this very neat and clear explanation

  • @hadihadidi6059
    @hadihadidi6059 Před 6 měsíci

    Best tutorial out there about Testing. Thank you!

  • @Ddos2212
    @Ddos2212 Před 2 lety +1

    You are a very good teacher. And I've seen a lot of teachers. Amazing job!

  • @oakinola
    @oakinola Před 3 měsíci

    Amazing video!! Thank you so much...clearly explains the difference between all 3 tests.

  • @jesusrivas5812
    @jesusrivas5812 Před 2 lety +1

    Best spring boot test video! Thanks for share this.

  • @OmarMendozaKS
    @OmarMendozaKS Před rokem

    The best testing tutorial I've seen ever, congrats and ty

  • @lorenzobonanni8625
    @lorenzobonanni8625 Před 3 lety +2

    Great Video, short but complete!

  • @mohammadahmedragab837
    @mohammadahmedragab837 Před rokem +1

    your explanation is very clear and simple, I like it, please do more videos about spring boot integration and unit testing ✨

  • @user-cv1pi1xq4w
    @user-cv1pi1xq4w Před 2 lety +1

    Man, it is awesome! I have been looking for your way of simple explanation of difficult thighs for two weeks) And finally it becomes clear for me. Thanx!!!

  • @dima_kowalski
    @dima_kowalski Před 2 lety +2

    Your video is the best!!!

    • @KrisFoster1
      @KrisFoster1  Před 2 lety +1

      Thank you @Dimon, glad you enjoyed!

  • @drbulltrader9107
    @drbulltrader9107 Před rokem

    I wanna say thank you for the crystal clear explanation.
    Good stuff, very useful.

  • @MarkChan
    @MarkChan Před 2 lety +1

    Thank you so much! You've explained it so clearly and it was easy to understand!

  • @francksgenlecroyant
    @francksgenlecroyant Před 2 lety

    Kris Foster always delivers good, quality and relevant content, thanks man!

  • @GuilhermeBressan
    @GuilhermeBressan Před rokem

    Great content. Thanks for the lesson bro! I'm migrating the backend of a project from PHP to Java, those tips really helped me.

  • @nouribenz
    @nouribenz Před 2 lety +1

    That was super helpful as a new tester 👌 thank you man 💪

  • @natalysilva5815
    @natalysilva5815 Před 3 lety +2

    Great tutorial, keep up with the good work! 😉

  • @jamesodeyale4950
    @jamesodeyale4950 Před 2 lety

    Amazing video. Thank you so much. Been looking for this for some time.

  • @akhileshsharma5119
    @akhileshsharma5119 Před 2 lety +1

    Simple and easy explanation.

  • @mr.j4840
    @mr.j4840 Před 3 lety +4

    Super super super! But you can use autowired without creating contructor.

    • @KrisFoster1
      @KrisFoster1  Před 3 lety +1

      That's a great point @MR. J, yes you can

  • @saichander8288
    @saichander8288 Před rokem

    Thank you very much for the content ☺️

  • @AmNotLegend
    @AmNotLegend Před 3 lety +5

    is @MvcTest not a Unit test? you mocked its dependencies. for the acceptance test, is it good to use Rest-Template to simulate invoking API from a client side?

    • @dusanristic4400
      @dusanristic4400 Před 2 lety +1

      It's not necessarily; you still have an integration between the actual HTTP Request and the Controller that handles the request. The rest is mocked to narrow the test (make it cheaper).
      As they are cheaper than Acceptance Tests, I find them useful to test error scenarios such as 403, 404, 400 or any other business/validation logic that might be returned by the controller.

    • @christianwulf8224
      @christianwulf8224 Před 2 lety +2

      I agree with you. It is a unit test, too. I would never call it an integration test. It does not integrate any two or more classes of the application.

  • @umutcanceyhan6781
    @umutcanceyhan6781 Před 2 lety

    Thanks man your content really helped me, cheers! Keep up with the good work

  • @ogookafor2137
    @ogookafor2137 Před 2 lety +1

    Liking and subscribing + notification THANK YOU!

  • @arihantdhobe
    @arihantdhobe Před 2 lety +2

    What do I need to do If I am writing a Batch Scheduler 15:08

  • @muratorhun8236
    @muratorhun8236 Před rokem

    Very helpful, thanks!

  • @sunpacplussoftware5948
    @sunpacplussoftware5948 Před 3 lety +1

    Thank you. Excellent tutorial!

  • @newaz9666
    @newaz9666 Před rokem

    Thank you, It is very helpful.

  • @devtools8704
    @devtools8704 Před 3 lety +1

    Thank you, this was very clear

  • @ariwansrisetya5714
    @ariwansrisetya5714 Před 2 lety

    Thank you so much! This helped me tremendously.

  • @nelsonlzrz5826
    @nelsonlzrz5826 Před 2 lety +1

    Muchas gracias por el tutorial! Very thanks, was helpful!

  • @tuenguyen8433
    @tuenguyen8433 Před 2 lety

    Thanks for sharing! this video really useful

  • @haditube
    @haditube Před 2 lety

    just brilliant. respeKt !

  • @symbolykos1810
    @symbolykos1810 Před 3 lety +1

    Very good video! Thank you!

  • @bronxed3666
    @bronxed3666 Před 2 lety +1

    amazing. thank you

  • @sergeychernikov6595
    @sergeychernikov6595 Před rokem

    Hi! Could you tell what keyboard you're using? Some mechanical one? Sound is amazing:)

  • @frankoppermann1877
    @frankoppermann1877 Před 2 lety

    Very nice video. How do you handle external service calls in acceptance tests. Are you using mocks or real calls?

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Před rokem

    Awesome!

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil Před rokem

    Why add a mock to the context? What will change if you use @Mock instead of @MockBean in the controller?

  • @alpavaidya412
    @alpavaidya412 Před 2 lety

    Very informative

  • @sujathamunjety2029
    @sujathamunjety2029 Před 3 lety

    Very clear,Thanks

  • @ignacioDGP
    @ignacioDGP Před 2 lety

    Thanks!

  • @brunosteffen8173
    @brunosteffen8173 Před 3 lety +2

    Hey,
    cool Tutorial!
    Can you also work those with Springsecurity?
    I can't do the acceptance test without my credentials. My tests would even need to get data based on who is logged in... Can you still test those?

    • @KrisFoster1
      @KrisFoster1  Před 3 lety +2

      Hi @Bruno Steffen, thank you for your comment! Things get a bit more complicated once spring security is added to the equation. There are a few different approaches I can think of that you could take:
      1. turn off spring security for the test. You could create a new spring security configuration that basically disables security for your endpoints. You could then use this configuration for your test. Here's a stackoverflow discussion where they're talking about how to do that stackoverflow.com/questions/23894010/spring-boot-security-disable-security.
      2. create a mock user before the test & authenticate as this user for your tests. This is probably a bit more complex but I think for acceptance tests this would be preferred because in the end, you want to make sure everything is working correctly.
      Sorry this answer probably doesn't tell you much more than you already know. Good luck!

    • @brunosteffen8173
      @brunosteffen8173 Před 3 lety +2

      @@KrisFoster1 On a different note, can you run the springboot application without running the tests? all i could find were people saying you would need to skip plugins in the maven lifecycle... I thought if you run the application in your IDE, the maven lifecycle doesnt even get triggered.

    • @KrisFoster1
      @KrisFoster1  Před 3 lety +1

      Yes if you run the application in from your ide or with mvn spring-boot:run from the command line the tests don't run. If you're using mvn compile /mvn package then they will

    • @mr.j4840
      @mr.j4840 Před 3 lety +1

      Spring Security series pls!

  • @themistocies50
    @themistocies50 Před rokem

    For some reason, an integration test execution was faster for me than simple unit test...

  • @user-fd3by9ne9y
    @user-fd3by9ne9y Před rokem

    controller call is not happening

  • @peshutanpavri1599
    @peshutanpavri1599 Před 2 lety +1

    Very Good tutorial, but the MockMVC code is ugly & confusing

  • @josecarlosrodriguez4574

    Short and concise, awful dude.

  • @theProgrammerX965
    @theProgrammerX965 Před 2 lety

    Best tutorial out there about Testing. Thank you!