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
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.
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.
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
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.
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.
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
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.
Hi everyone i have an error when i try to mock a GenericRepository. this is my test class: public class GenericRepositoryTests { [Fact] public async Task GetByIdAsync_ShouldWork() { var _contextMock = new Mock(); var _dbSetMock = new Mock(); //Arrange int entityId = 1; var mockReturn = new TestClass { Id = entityId }; _contextMock.Setup(x => x.Set()) .Returns(_dbSetMock.Object) ; _dbSetMock.Setup(x => x.FindAsync(entityId)) .ReturnsAsync(mockReturn) ; var _sut = new GenericRepository(_contextMock.Object); //Atc var entity = await _sut.GetByIdAsync(entityId); //Assert Assert.Equal(entityId, entity.Id); _dbSetMock.Verify(x => x.FindAsync(entityId), Times.Once()); } } and the first method of my genericRepository public class GenericRepository : IGenericRepository where T : class { public DBLibraryContext _context; public DbSet _dbSetEntities;
public GenericRepository(DBLibraryContext context) { _context = context; _dbSetEntities = _context.Set(); } public async Task GetByIdAsync(int id) { var entity = await _dbSetEntities.FindAsync(id); if (entity != null) { _context.Entry(entity).State = EntityState.Detached; } return entity; } } But i get an error in line _context.Entry(entity).State = EntityState.Detached when the test is executed and say: System.NullReferenceException : Object reference not set to an instance of an object. Then if i comment this line the test past //_context.Entry(entity).State = EntityState.Detached;
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?
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.
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.
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.
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
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!
@@grigorecosmin when using ReturnAsync it says only assignment, call, increment, decrement, await and new object expressions can be used as a statement
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.
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.
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.
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.
4 года назад+1
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 .
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
I don't know why this question doesn't have a response (or why I'm here! Thought process was, "are people still using Moq?"). Anyway for anyone else that stumbles across it. Those attributes are not part of Moq they are the testing framework, [Fact] is xUnit, [Test] possibly nUnit, [TestMethod] for example is MSTest. Hope that helps somebody.
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.
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.
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. :)
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.
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
Hi Nick, I want to buy a copy of the content on XUNIT Mock Framework in C# , if you have complete video content , please share your details to connect you directly
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.
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!!
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.
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
@@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.
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?
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.
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
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.
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
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:)?
@@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"
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.
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
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
An advanced video would be awesome, Thanks Nick!
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.
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.
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
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.
That is so great to hear Ranvir! Glad I could help 😃
same here!!!! thanks Nick!!
Yeah this guy is a good teacher.
Same here
Hey same here. Now I understood. Can’t express my happiness. A big relief. Thanks
Thank you, Nick. I tried both and love Moq better. I'm sticking with it.
Nice. Thank for sharing
did covered unit test will also work for visual studio?
Aren't you just testing the mock and not the actual code?
can please share source code link?
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.
I don't see the github repo?
me too
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
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.
Hi everyone
i have an error when i try to mock a GenericRepository.
this is my test class:
public class GenericRepositoryTests
{
[Fact]
public async Task GetByIdAsync_ShouldWork()
{
var _contextMock = new Mock();
var _dbSetMock = new Mock();
//Arrange
int entityId = 1;
var mockReturn = new TestClass
{
Id = entityId
};
_contextMock.Setup(x => x.Set())
.Returns(_dbSetMock.Object)
;
_dbSetMock.Setup(x => x.FindAsync(entityId))
.ReturnsAsync(mockReturn)
;
var _sut = new GenericRepository(_contextMock.Object);
//Atc
var entity = await _sut.GetByIdAsync(entityId);
//Assert
Assert.Equal(entityId, entity.Id);
_dbSetMock.Verify(x => x.FindAsync(entityId), Times.Once());
}
}
and the first method of my genericRepository
public class GenericRepository : IGenericRepository where T : class
{
public DBLibraryContext _context;
public DbSet _dbSetEntities;
public GenericRepository(DBLibraryContext context)
{
_context = context;
_dbSetEntities = _context.Set();
}
public async Task GetByIdAsync(int id)
{
var entity = await _dbSetEntities.FindAsync(id);
if (entity != null)
{
_context.Entry(entity).State = EntityState.Detached;
}
return entity;
}
}
But i get an error in line _context.Entry(entity).State = EntityState.Detached when the test is executed and say: System.NullReferenceException : Object reference not set to an instance of an object.
Then if i comment this line the test past
//_context.Entry(entity).State = EntityState.Detached;
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?
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.
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.
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.
Yes, we want advanced :).
I was literally tired watching videos on Nunit but this is "THE" best explanation !! hats off to you efforts.. !!
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
Probably worth mentioning you shouldn't use this method for inserting customers as you'll leave yourself vulnerable to SQL injection attacks
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!
Hi Nick, thank you for your video's. Can you put your code her please, i can't find it in your link
Your Github repo for this app has over 2000 commits. Which commit should we download for this video?
"Returns()" from the repo mock is returning a Task that can't be converted to the model. help
same issue, please let me know if you solve it
@@AyushKarn25 Yes, use ReturnsAsync().
@@grigorecosmin it says this requires a receiver of type ISetupSequentialResult
Any solution to this?
@@grigorecosmin when using ReturnAsync it says only assignment, call, increment, decrement, await and new object expressions can be used as a statement
Hey man, would you please send me link in which you discussed the Microsoft logger for dot net core web api. thanks in advance
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.
Why copy the whole thing and not just use TestCase? Also you should have created a method to create the customer and return the customer dto
I think NSubstitute is the much better mocking framework. The code is so much more readable and easier to understand.
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.
@@nickchapsas Alright that makes sense. Looking forward to that next video. Btw your Blazor video series helped me a lot.
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.
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.
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 .
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
The first line in the description will point you to the code
unable to download the source code.pls help
WHERE IS THIS SOLUTION ON YOUR SOURCES REPO WHATS IT NAMED ?!
I see some example use [Test] instead of [Fact] with Moq, can anyone explain?
I don't know why this question doesn't have a response (or why I'm here! Thought process was, "are people still using Moq?"). Anyway for anyone else that stumbles across it. Those attributes are not part of Moq they are the testing framework, [Fact] is xUnit, [Test] possibly nUnit, [TestMethod] for example is MSTest. Hope that helps somebody.
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.
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.
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. :)
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.
I would also like to watch a video about an advanced usage
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
Hi Nick, I want to buy a copy of the content on XUNIT Mock Framework in C# , if you have complete video content , please share your details to connect you directly
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.
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!!
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.
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
@@robertsnyder4480 why don't we add the service and the repository as a dependency to the controller?
@@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.
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"
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.
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?
Rosalinda Manors
You say gooo weed... I know what you want dude.
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.
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
Very well explained with real examples. Awesome!
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.
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!)
it was a great session. How can we mock a external library extension extension methods using mock and XUnit
Not working, I'm using dapper , base repository class.
Great video, as always. Straight to the point, very clear and thorough. Thanks Nick!
Marcelina Field
Hai can you please tell me how to return only response and how to return null and nonull in xunit
Reed Cliffs
Thanks for the video Nick, it was just what i was looking for :)
Thank you so much, very informative and well explained :-)
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
you can add it to live templates in rider. Don't forget add space before //. In my case, without space it doesn't work
ah the good old times
I was like nah imma head out from testing part and then I found this video. 30 mins and all good. thnx mate.
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:)?
I have my own code template that implements that for me in rider
@@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"
Very good explanation
:)
How to test controllers?
You're just the best, you can explain anything in a perfectly understandable way.
Good video, but better to use conrete value or Is instead of IsAny
that was grate, thanks
Excellent example and you have a great pronunciation for a mexican, thank you very much ... subscribed!
I’m Greek
Good job, we are waiting the next video about NSubstitute & fake ...
What kind of extensions are you using while writing code in vs code tool.
Like and a Subscription. Great rapid walkthorough. Thank you!
where is the link to repo and how can we mock DataContext?
is the _sut naming convention a standard when doing a test?
I don't think it's standard however I've seen it a fair number of times and do it myself.
@@robertsnyder4480 I think I'll get used to _sut instead of _concreteClass right 😆
this video saves me
!
very easy to understand on the Moq usage
thanks Nick!
Nice tutorial but the link in desc didnt take me to source code, is there a direct link ?
Excellent
Thanks 👍
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.
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
@@nickchapsas yep agreed. I updated my comment as well showing what xUnit says.
Thing I missing is Moq + Dapper in terms of splitOn
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?
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.
very good explanation..thanks!!
could you please share the project link
Awesome !! Great video to understand, how to write test case
Well explained
Very nice explanation Nick.. Keep it up...!!
Disappointed. I thought this was a video where we mock people who do unit tests..
HAHAHAHAHAHAHHAHAHAAHHAHAH
Hi Nick, I am interested in the advanced tutorial on unit testing
Loving these videos. Short enough and in sufficient detail to grasp the basics quickly, without having to devote hours at a time.
how to implement if code not using of DTO
Thank you so much! You helped me a lot!
Thank you for this useful video
Thanks for sharing, yes an advanced is indeed needed.
Great video, very helpful!
Great job, Advanced video, please
thanks for the video, I love it.
hallo Nick, Thanks for the tutorial,
Great tutorial! Thanks!👍
Great learning material. It would be great if we can find and download source code.
You can find the source in the video description