I want to test a method to check that it saves a transaction correctly. Inside it calls Membership.GetUser() to verify the user which causes the test to fail each time. Is there any way to mock this so that Membership.GetUser() always returns a valid name?
I'm using Moq, C# and ASP.Net 4.5 MVC
You can either create a unit test project when creating your application or add a unit test project to an existing application. This tutorial shows both methods for creating a unit test project. To follow this tutorial, you can use either approach.
Unit Testing Using XUnit And MOQ In ASP.NET Core.
xUnit. xUnit is a free, open source, community-focused unit testing tool for . NET. Written by the original inventor of NUnit v2, xUnit.net is the latest technology for unit testing .
In short, you can't. That's why every call to such a "service" should be hidden behind an abstraction.
You can see a sample of that in default MVC template.
Yes, like Serg said, you can mock this by providing an interface for the real service to implement. This interface would have the public methods you are calling, such as:
public interface IMyServiceInterface
{
IMembershipUser GetUser();
// other methods you want to use...
}
In your unit tests, you would say:
var mockService = new Mock<IServiceInterface>();
mockService.Setup(mock => mock.GetUser()).
Returns(new MembershipUserImplementation("MyTestUser", otherCtorParams));
In my example I would create a wrapper for MembershipUser as well as it seems like it also needs to be behind an abstraction.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With