Are you looking for more training? Check out my "From Zero to Hero: Unit testing in C#" course: nickchapsas.com/p/from-zero-to-hero-unit-testing-in-c
@haskell3702 Жыл бұрын
Hi, how can I verify a protected method call using DI? when I use var mock=new Mock and try setup the protected with mock.Protected().Setup("MyMethod") I get a error: "No protected method found", but the method exists and it is virtual but if I use var mock=new Mock it works but this way is not acceptable for my project, you know
@da3dsoul3 ай бұрын
4 years late in learning this lol. Man, you have gotten so much better at presenting in these 4 years. Great job
@rvranny4 жыл бұрын
My day today: 1. Tried to understand Mocking over the Internet: > 6 hours 😟 2. Took a nap: 30mins 😴 3. Finally learnt through this video: 20mins 🙂 4. Subscribed:1sec 🤘 Thank you Nick, please go for advance xUnit and Moq.
@nickchapsas4 жыл бұрын
That is so great to hear Ranvir! Glad I could help 😃
@_Anherius_4 жыл бұрын
same here!!!! thanks Nick!!
@nelsonfabianriosdeantonio62114 жыл бұрын
Yeah this guy is a good teacher.
@rajaniupadhyay78753 жыл бұрын
Same here
@subhraswarup2 жыл бұрын
Hey same here. Now I understood. Can’t express my happiness. A big relief. Thanks
@ppriyadarshini818 ай бұрын
I was literally tired watching videos on Nunit but this is "THE" best explanation !! hats off to you efforts.. !!
@vmamore5 жыл бұрын
An advanced video would be awesome, Thanks Nick!
@thesuperiorman83424 жыл бұрын
I watched this first before knowing anything about mocking but I didn't understand much. I then read a beginner friendly article that gave a very simple introduction and then later came back to watch this video and it all makes sense now. Your examples are helpful because they are real world which is what I need for my project.
@nickchapsas4 жыл бұрын
Yeah I got that feedback quite a bit. So the assumption of the video is that the viewer already understands the concept of mocking, in order to keep the video length smaller, but it might be harder for complete beginners.
@AhmedRaza-ru1rj2 жыл бұрын
I spent hours figuring out why I was getting NullReferenceException as I just started learning and using moq. Your video covered the exact scenario. Thanks, mate
@GrahamStw4 жыл бұрын
Nice video. thanks. Small point: some viewers might be tempted to put the creation of the Mock instances at the class fixture level (e.g. in an IClassFixture for xUnit). Don’t do that because the Mock contains state information (which Setups exist, what has been called, what was Verified), so a new Mock instance should be created for each test case.
@justraccoon30472 жыл бұрын
Omg, bro. I had tried to understand it with lots of mistakes for 4 hours, but you just explained it in 20 minutes in a simple way. Thanks a lot!)
@digimonsta4 жыл бұрын
Loving these videos. Short enough and in sufficient detail to grasp the basics quickly, without having to devote hours at a time.
@react_333 жыл бұрын
I was like nah imma head out from testing part and then I found this video. 30 mins and all good. thnx mate.
@vishalbalani76923 жыл бұрын
Thank you Nick, I always had hard time with mocking test cases but finally I was able to successfully mock and fix the test cases which were having problem. Thanks a lot!!
@harikakiran184 жыл бұрын
Great material, thanks Nick for putting this together. Appreciate it! Looking forward to see advanced videos especially eliminating the external dependencies like database, network, api calls etc. with some mocked data. You have got great content on your channel, sub'ed. Will spend some time, thank you.
@arwwarr75782 жыл бұрын
You're just the best, you can explain anything in a perfectly understandable way.
@sherazdotnet3 жыл бұрын
1+ to naming convention on class name. Very handy. I haven't used Rider (in fact didn't even know about it) but I use Resharper in VS and one very handy feature is to see the list of all the files by pressing Ctrl + N. Now when you name a test file as a convention of Object + Test, it becomes very easy to find the tests. If I have a TradeBookingViewModel class, I can have a TradeBookingViewModelTests and just like that, when I type TBVM in Ctrl+N window, it will pop both classes showing actual class and the tests for that class.
@zv7ws2 жыл бұрын
Thanks for the video Nick, it was just what i was looking for :)
@yaknad4 жыл бұрын
Great video, as always. Straight to the point, very clear and thorough. Thanks Nick!
@sunilanthony175 жыл бұрын
Thank you, Nick. I tried both and love Moq better. I'm sticking with it.
@rishikeshkumar81414 жыл бұрын
Very well explained with real examples. Awesome!
@vitaliykoritko50803 жыл бұрын
Good video, but better to use conrete value or Is instead of IsAny
@argelpamintuango19564 жыл бұрын
this video saves me ! very easy to understand on the Moq usage thanks Nick!
@michaelkopljan5785 жыл бұрын
Thanks Nick for all your videos!
@QuickZ_2 жыл бұрын
Very nice job again, sensei! But I hope people dont start returning null as a result. Null should mean "I dont know" if anything. You already know this Nick since you made videos about better ways. Just putting it out for the people. To many use null as a valid value.
@torrvic11563 ай бұрын
Who is Theodor Ntakouris anyway? You should tell us more Nick? 😊Otherwise thanks for awesome video! It really helped me to realise how can I use this unit/integration tests in real applications.
@hansikachowdary45814 жыл бұрын
Great video nick! Helped a lot.
@sagarpatil59973 жыл бұрын
Very nice explanation Nick.. Keep it up...!!
@rossthemusicandguitarteacher4 жыл бұрын
Very good explanation :)
@sherifmankarious884 жыл бұрын
Thanks for sharing, yes an advanced is indeed needed.
@jakubczechowski11593 жыл бұрын
Thank you for the video!
@iryzen96732 жыл бұрын
Thank you so much! You helped me a lot!
@dave_1996 Жыл бұрын
Great video, very helpful!
@fatemehfathollahi19212 жыл бұрын
Thank you for this useful video
@vabhs1920034 жыл бұрын
Nick: Any specific reason to pick the Xunit over NUnit? Loving your videos. Please keep posting new stuff. Your playlist is a treasure trove of complex concepts made simple. Already a subscriber. :)
@robertsnyder44802 жыл бұрын
I just had a talk at work on this very subject. Even though I used to contribute to NUnit, I'm here to tell you that it really doesn't matter between xUnit, NUnit, or MsTest v2. There is very little that you can't do in one over the other. If you refer to Nick's video on Nuget packages you should use he also mentions getting FluentAssertions which makes the argument of you prefer the way assertions are written in one framework over another. We went with xUnit at my current client because it keeps with the mentality of writing helper classes in your test projects that you can pass into the ctor just like you would with production code.
@RavindraKumar-dh6dn4 жыл бұрын
Awesome !! Great video to understand, how to write test case Well explained
@luisbragado1712 жыл бұрын
Excellent example and you have a great pronunciation for a mexican, thank you very much ... subscribed!
@nickchapsas2 жыл бұрын
I’m Greek
@nishthaarora19073 жыл бұрын
very good explanation..thanks!!
@shuvo91312 жыл бұрын
thanks for the video, I love it.
@salarkazazi75843 жыл бұрын
Thank you so much, very informative and well explained :-)
@anamariacompany19203 жыл бұрын
Great demo!!!
@TroyMakesGames4 жыл бұрын
Fantastic video! Thanks
@alisadeghi36423 жыл бұрын
excellent tutorial
@GBG7314 жыл бұрын
hallo Nick, Thanks for the tutorial,
@hvndev4763 жыл бұрын
Nice. Thank for sharing
4 жыл бұрын
Congratulations for you video, I was looking for this project in your git hub repository but I didn't found it . I would like to check it .
@emilgebl86443 жыл бұрын
Regarding the log information, what if you use dependency injection and sent the logger in as Ilogger Logger? do you mock it then? how could you compare it then like at 19:12
@zohashobbar1182 жыл бұрын
that was grate, thanks
@nadaralpenidze95494 жыл бұрын
Hey Nick, amazing video. I have one question, If my purpose is testing GetUserById and I create a mock which returns a value I'm deliberately giving to it, how does it benefit my test? I won't know if my actual service works, I know that the mock works. Am I missing something?
@JustMe-hv5re4 жыл бұрын
I would say no, I have asked this question repeatedly to people who promote it and the only benefit is testing exceptions/testing for nulls. This will not test data type matching for parameters, missing parameters being passed to stored procedures, columns coming back lining up (ie assigning them to the actual class property coming back and referencing it), or that stored procedure names are correct. As far as I am concerned this a waste of time and repos really need integration testing to a test db.
@Psykorr3 жыл бұрын
Agreed. Use mocks for the things around the db calls, and actually test bd calls with some tool like postman or some sql program like sql server management studio or whatever on test bd's. I've seen real problems with calling systems that only use mocks for testing db calls. Often they don't work and real people are affected by it.
@robertsnyder44802 жыл бұрын
Along the same words as the first 2 replies I'd treat db calls like any other external system. Make the mock return reasonable data that you would legit see (or portions of it). knowing what your external service is going to return is part of the leg work of Proof of concept projects or having a integration test project that only runs locally to test these data structures. Just know that those tests are usually brittle and break easily and are hard to understand usually.
@serhiihorun62985 жыл бұрын
Great work!
@hchattaway Жыл бұрын
This is a great video and answered a lot of questions.. but i still have one which may be a stupid question! :).... If a method is being setup as shown and you specify what it shall return, the underlying implementation is still not actually being called right? it seems like you're telling it what to return so the test will always pass.... that is unless of course the actual implementation is being called somehow.. but I don't see that... Could you clarify this confusion? Thanks!
@andriyzubyk6295 жыл бұрын
Thanks Nick
@piotrc9665 жыл бұрын
Yes, we want advanced :).
@redachouiba48625 жыл бұрын
Good job, we are waiting the next video about NSubstitute & fake ...
@joelvilabringuez71622 жыл бұрын
Excellent
@ursmuller55453 жыл бұрын
Thanks 👍
@brahmcdude6853 жыл бұрын
14:41 ".Returns(() => null);" - I built this example using non-async. I still got an error for this: ".Returns(null);". Here is the error: "CS0121 The call is ambiguous between... 'IReturns.Returns(TResult)' and 'IReturns.Returns(Func)'". Using ".Returns((CustomerDto)null);" also resolves this error.
@viniciussantosaguiar95434 жыл бұрын
Super good! It helps me a lot!!!
@jfpinero4 жыл бұрын
I didn't watch the whole video but when creating your mocks, you should specify MockBehavior.Strict or whatever it is to make sure you are not calling something you didn't intend.
@sherazdotnet3 жыл бұрын
Quick Question: Why are you using constructor in test class? Not sure which testing framework you are using but I think it should have a Setup attribute or something similar that you can decorate your method which will make the framework run the method every time a new test is run. Wondering why you decided to use constructor instead? Update: figured it out. you are using XUnit and here is what they say [SetUp] [TestInitialize] Constructor We believe that use of [SetUp] is generally bad. However, you can implement a parameterless constructor as a direct replacement. See Note 2 Cool.
@nickchapsas3 жыл бұрын
Nah that’s not needed in xunit it’s unnecessary. The pattern with xunit is constructor for setup and dispose method for tear down which is way cleaner
@sherazdotnet3 жыл бұрын
@@nickchapsas yep agreed. I updated my comment as well showing what xUnit says.
@mikolajsemeniuk85743 жыл бұрын
great video
@koryphaee47965 жыл бұрын
I think NSubstitute is the much better mocking framework. The code is so much more readable and easier to understand.
@nickchapsas5 жыл бұрын
I totally agree with you as well. I am personally using NSubstitude and the next video is about that. I needed to show how NSub improves upon Moq so I had to show Moq first before I show NSub.
@koryphaee47965 жыл бұрын
@@nickchapsas Alright that makes sense. Looking forward to that next video. Btw your Blazor video series helped me a lot.
@alevsoft4 жыл бұрын
Like and a Subscription. Great rapid walkthorough. Thank you!
@alpsavasdev2 жыл бұрын
I really don’t understand copy-pasting the exception message inbetween the test and the method implementation. This is one of the things about unit testing which does not sound quite right to me. I don’t know if there is a better way, though.
@ravibugude19342 жыл бұрын
it was a great session. How can we mock a external library extension extension methods using mock and XUnit
@marekk90084 жыл бұрын
I would also like to watch a video about an advanced usage
@bigboy37752 жыл бұрын
Thx for this toturial! I have a question, how do I see the code coverage? I don't have the right-click option to "View Code Coverage"
@JohnSourvinos3 жыл бұрын
Greetings from 39°38'N / 19°55'E. In the GET method (around 11:30 - line 28) you provide the expected response as a CustomerDto object. Later in the Assert (line 41), the customerId is compared with the CustomerDto's Id. Since the call to the service is fake and no 'real' data is fetched, what is the point of comparing two things that are by definition equal? Unless this test is done only to increase the code coverage, can you please give us a good reason for testing the GET method?
@Tajemniczy2 жыл бұрын
Hey, big thanks for the video:) now all is more understandable, I just starting playing with unit tests.. I have one question, can you tell me how you have aaa autocomplete it (Arrange Act Assert) ?:) thanks PS. For right now I make it snippet file and manually I'm adding this into visual studio and it's working fine but maybe is some already nuget with this function:)?
@nickchapsas2 жыл бұрын
I have my own code template that implements that for me in rider
@Tajemniczy2 жыл бұрын
@@nickchapsas aa ok:), the same day I tried to find an extension to visual studio that would have such functionality, but unfortunately I did not find anything, so I decided to see if it is hard to create such an extension with such functionality and I sat up all night and managed to create such a thing, it now generates me AAA (Arrange, Act, Assert) and test methods that contain it, if you want it you can find in the marketplace under the name AAASnippet including documentation ;d. It's not some mega awesome, it's my first, but it does what it's supposed to do :) "AAASnippet"
@pavfrang2 жыл бұрын
Unfortunately the behavior with ILogger and extension methods (LogDebug, LogInformation) is not supported. You have to write the plain Log method which is quite big and almost impractical. I suspect that's why you wrote a "generic ILoggingService" and not the standard ILogger.
@shaunhunterit342 Жыл бұрын
Your Github repo for this app has over 2000 commits. Which commit should we download for this video?
@zerosandones75472 жыл бұрын
I got confused on the Repository and the Service. Why does both of them have the same exact methods? Like, the repository has GetAllAsync(), and the service has GetAllAsync() as well, but the service uses the repository's method. Shouldn't we just use the repository in the controller? I'm new to things like this, and I just use an IMyRepository in my controllers.
@robertsnyder44802 жыл бұрын
it's not uncommen for the service to have multiple repositories or other external business rules and logic. His example helped to simplify things. So as far as business is concerned you're just getting customer data but that might include addresses and images and html.. You could be testing flow or how it reacts to systems being down. Hope this helps
@zerosandones75472 жыл бұрын
@@robertsnyder4480 why don't we add the service and the repository as a dependency to the controller?
@robertsnyder44802 жыл бұрын
@@zerosandones7547 it might just be naming if you are referring to the controller in MVC pattern then you are right. If you mean controller as in entry point for web API then no. This is entry point and should deal with validation of the request and returning appropriate response based on your service output.
@enissay99502 жыл бұрын
Hi Nick, amazing video as usual. I tried to add the shortcut aaa to generate my fact method, but I failed miserably. I have successfully added it to the LiveTemplates, but teh shortcut is not working in the Unitest context, not sure how to configure that :-/ Which brings me to a request: can you have a video to show your favorite custom templates, and maybe other Rider tricks as well as how to set that up
@МаратЕлагин2 жыл бұрын
you can add it to live templates in rider. Don't forget add space before //. In my case, without space it doesn't work
@grigorecosmin3 жыл бұрын
"Returns()" from the repo mock is returning a Task that can't be converted to the model. help
@AyushKarn253 жыл бұрын
same issue, please let me know if you solve it
@grigorecosmin3 жыл бұрын
@@AyushKarn25 Yes, use ReturnsAsync().
@AyushKarn253 жыл бұрын
@@grigorecosmin it says this requires a receiver of type ISetupSequentialResult Any solution to this?
@AyushKarn253 жыл бұрын
@@grigorecosmin when using ReturnAsync it says only assignment, call, increment, decrement, await and new object expressions can be used as a statement
@steveo600rr4 жыл бұрын
I don't see the github repo?
@PatrickGandoolfi4 жыл бұрын
me too
@andersonpaolo22024 жыл бұрын
Hi Nick, thank you for your video's. Can you put your code her please, i can't find it in your link
@RenatoFontes3 жыл бұрын
Aren't you just testing the mock and not the actual code?
@MikeBSc2 жыл бұрын
You haven't shown how to include the Moq libraries. I put "using Moq;" at the top of my test class and says it can not be found.
@zeljkobilandzija17484 жыл бұрын
Great learning material. It would be great if we can find and download source code.
@nickchapsas4 жыл бұрын
You can find the source in the video description
@rs38002 жыл бұрын
have you guys ever encountered problems with visibility to MOQ? does not work for me to .Setup(), whereas it works fine with for the rest of the Test but not for setting up MOQ.
@robertsnyder44802 жыл бұрын
not personally. The only time I've done this is when I've mocked HttpClient (well the handler that gets passed into the ctor). It only has a protected member that you have to override. There is a contribs nuget package to help with this but you can also define an interface and use the .Internal().As() or .Protected().As(). I find this easier to deal with as long as I know the hidden signature won't change.
@uakrongrad3 жыл бұрын
great video, sorry I'm having trouble locating the source code for the project demo'd. I do not see a direct reference, nor indirectly from the git hub link. please add it. TYVM
@nickchapsas3 жыл бұрын
The first line in the description will point you to the code
@khaledslaimia31353 жыл бұрын
good video dear sir.but i have a problem,i work with automapper and the controller return null.it seems that the autommaper should be inciated only one time.can yo help me with that
@olayemiafolabi21514 жыл бұрын
Hi Nick, I am interested in the advanced tutorial on unit testing
@atifsaeedkhan9207 Жыл бұрын
Hey man, would you please send me link in which you discussed the Microsoft logger for dot net core web api. thanks in advance
@nelsonfabianriosdeantonio62114 жыл бұрын
Awesome
@mohanalingamp31782 жыл бұрын
Hi Nick, you are doing a great job man. Same way I would like to know about Nunit testing for the concepts like dependency injection, API request and responce, etc. Hope you will see and make videos for it.
@SantyaRocks3 жыл бұрын
Hi Nick Hope you're doing well. I watched your all xunit video I'm struggling for writing unit test using xunit framework. One for the method is inserting records into SQL db. I have written unit test case for this method but in the end cmd. executenonquery throwing exception like below "BeginExecuteNonQuery requires an open and available connection. The connection currently state is closed" I believe I need to mock sqlconnection. Any suggestions. Appreciated
@zerosandones75472 жыл бұрын
is the _sut naming convention a standard when doing a test?
@robertsnyder44802 жыл бұрын
I don't think it's standard however I've seen it a fair number of times and do it myself.
@zerosandones75472 жыл бұрын
@@robertsnyder4480 I think I'll get used to _sut instead of _concreteClass right 😆
@Bikramkumarsahoo19884 жыл бұрын
What kind of extensions are you using while writing code in vs code tool.
@whateverman38464 жыл бұрын
Nice tutorial but the link in desc didnt take me to source code, is there a direct link ?
@seacprogrammer84554 жыл бұрын
WHERE IS THIS SOLUTION ON YOUR SOURCES REPO WHATS IT NAMED ?!
@kostasntou86494 жыл бұрын
Ωραίος !
@TheRabinarayan4 жыл бұрын
unable to download the source code.pls help
@priyanshu40163 жыл бұрын
did covered unit test will also work for visual studio?
@mikolajsemeniuk85743 жыл бұрын
where is the link to repo and how can we mock DataContext?
@LonliLokli3 жыл бұрын
Thing I missing is Moq + Dapper in terms of splitOn
@somnathkadam12333 жыл бұрын
can please share source code link?
@haskell3702 Жыл бұрын
Hi, how can I verify a protected method call using DI? when I use var mock=new Mock and try setup the protected with mock.Protected().Setup("MyMethod") I get a error: "No protected method found", but the method exists and it is virtual but if I use var mock=new Mock it works but this way is not acceptable for my project, you know
@yaaanakutty82123 жыл бұрын
Hai can you please tell me how to return only response and how to return null and nonull in xunit
@markopavlovic60663 жыл бұрын
Helloo my brother when I want to display triple aaa like you there is no snippet for that, can you tell me how to do it?
@nickchapsas3 жыл бұрын
I created a Live Templates using my Rider's feature. It's different based on the IDE that you are using. In Visual Studio it's called Snippets.
@PentarexBG Жыл бұрын
ah the good old times
@EricOnYouTube4 жыл бұрын
How did you get the aaa to expand to Arrange Act Assert?
@nickchapsas4 жыл бұрын
I have created a template for it in JetBrains Rider so I just to aaa and press Tab and it creates it for me