Recently I am heavily learning Test Driven Development and Domain Driven design. As you know With TDD you need to have a mocking libraries. So after doing on research on internet they are three libraries available in Microsoft.NET development world which are quite mature.
http://nsubstitute.github.io/
It’s also available on NuGet and You can install it via Nuget via following command.
![NSubstitute-nuget-package NSubstitute-nuget-package](https://lh3.ggpht.com/-3RI3U0BXhes/VQH3ZiLfBcI/AAAAAAAAEz4/1NKz8t0NDgo/NSubstitute-nuget-package_thumb%25255B1%25255D.png?imgmax=800)
So what’s we are waiting for Let’s create a demo application to see how it’s works. I am going to create a console application to demonstrate this.
![NSubstitute-demo-console-application NSubstitute-demo-console-application](https://lh3.ggpht.com/-gFPC5n2vMsk/VQH3bYUoXCI/AAAAAAAAE0I/55_i2s1Gieg/NSubstitute-demo-console-application_thumb%25255B1%25255D.png?imgmax=800)
I am also going to Add a Test Project to Run my test created with Help of NSubstitute.
![NSubstitute-demo-console-test-project NSubstitute-demo-console-test-project](https://lh4.ggpht.com/-sdSHficNXHk/VQH3c8PTeiI/AAAAAAAAE0Y/SY6_SX2qz-M/NSubstitute-demo-console-test-project_thumb%25255B1%25255D.png?imgmax=800)
Now I’m going to create person interface like below.
![adding-nuget-package-nsubstitute-test adding-nuget-package-nsubstitute-test](https://lh6.ggpht.com/-VYOJ_CqkCcA/VQH3ej5WrkI/AAAAAAAAE0o/FIY722qThMw/adding-nuget-package-nsubstitute-test_thumb%25255B1%25255D.png?imgmax=800)
Once we are done I have written following code to write a test for Person class.
![NSubstitute-test-result NSubstitute-test-result](https://lh6.ggpht.com/-1ofFvGKx5Uc/VQH3gEW0wvI/AAAAAAAAE04/ljXmBXJHuTc/NSubstitute-test-result_thumb%25255B1%25255D.png?imgmax=800)
That’s it. Hope you like it. Stay tuned for more.
- Rhino Mocks
- NSubstitute
- Moq
Why I Choose NSubstitute:
Following are the reasons why I have chosen NSubstitute.- It is super easy to use. I don’t have to write very complex lamda expressions to mock objects.
- It works really fine with all framework of Test Driven Development
- As it is super easy to use you need to write very less code to mock objects.
- With other Visual Studio plugins like Resharper, Telerik Justcode its works perfectly and they are able to generate code for the same.
- It’s got fluent syntax and very easy to understand.
- It’s perfect for some one who is not mature enough for Test Driven Development.
NSubstitute - Basic Introduction:
NSubstitute is relatively a new kid on the block as compare to other two mocking libraries. It’s is a open source project hosted on github. You can find all the information related to NSubsitute via following site.http://nsubstitute.github.io/
It’s also available on NuGet and You can install it via Nuget via following command.
![NSubstitute-nuget-package NSubstitute-nuget-package](https://lh3.ggpht.com/-3RI3U0BXhes/VQH3ZiLfBcI/AAAAAAAAEz4/1NKz8t0NDgo/NSubstitute-nuget-package_thumb%25255B1%25255D.png?imgmax=800)
So what’s we are waiting for Let’s create a demo application to see how it’s works. I am going to create a console application to demonstrate this.
![NSubstitute-demo-console-application NSubstitute-demo-console-application](https://lh3.ggpht.com/-gFPC5n2vMsk/VQH3bYUoXCI/AAAAAAAAE0I/55_i2s1Gieg/NSubstitute-demo-console-application_thumb%25255B1%25255D.png?imgmax=800)
I am also going to Add a Test Project to Run my test created with Help of NSubstitute.
![NSubstitute-demo-console-test-project NSubstitute-demo-console-test-project](https://lh4.ggpht.com/-sdSHficNXHk/VQH3c8PTeiI/AAAAAAAAE0Y/SY6_SX2qz-M/NSubstitute-demo-console-test-project_thumb%25255B1%25255D.png?imgmax=800)
Now I’m going to create person interface like below.
namespace NSubstituteBasicDemo { public interface IPerson { string GetFullName(string firstName,string lastName); } }And same way I am going to create implementation of IPerson interface like below.
namespace NSubstituteBasicDemo { public class Person : IPerson { public string GetFullName(string firstName, string lastName) { return string.Format("{0} {1}", firstName, lastName); } } }Now it’s time to write Test and for that we need to add nuget package for NSubstitute in test project.
![adding-nuget-package-nsubstitute-test adding-nuget-package-nsubstitute-test](https://lh6.ggpht.com/-VYOJ_CqkCcA/VQH3ej5WrkI/AAAAAAAAE0o/FIY722qThMw/adding-nuget-package-nsubstitute-test_thumb%25255B1%25255D.png?imgmax=800)
Once we are done I have written following code to write a test for Person class.
using Microsoft.VisualStudio.TestTools.UnitTesting; using NSubstitute; using NSubstituteBasicDemo; namespace NSubstituteTest { [TestClass] public class PersonTest { [TestMethod] public void ToCheck_Whether_Person_FullName_Work_Or_Not() { //Creating Substiute for person var person = Substitute.For<IPerson>(); //Adding a return value person.GetFullName("Jalpesh", "Vadgama").Returns("Jalpesh Vadgama"); //Asserting to check whether its fine or not Assert.AreEqual("Jalpesh Vadgama", person.GetFullName("Jalpesh", "Vadgama")); } } }Now when you run this Test it’s work perfectly.
![NSubstitute-test-result NSubstitute-test-result](https://lh6.ggpht.com/-1ofFvGKx5Uc/VQH3gEW0wvI/AAAAAAAAE04/ljXmBXJHuTc/NSubstitute-test-result_thumb%25255B1%25255D.png?imgmax=800)
That’s it. Hope you like it. Stay tuned for more.
You can find complete source code of this blog post at -https://github.com/dotnetjalps/NSubstituteExamples
0 comments:
Post a Comment
Your feedback is very important to me. Please provide your feedback via putting comments.