I'm developing a Web API, and one of the test I came up with is that, if client makes a GET operation with a Physical Test ID (Physical Test is the resource I'm looking for) and that physical test is not found, the web API should return a 404 status.
Now, I'm using moq framework for my tests and I have the following code:
[TestMethod] public void then_if_physical_test_not_found_return_not_found_status() { var unitOfWork = new Mock<IUnitOfWork>(); var repository = new Mock<IRepository<PhysicalTest>>(); repository.Setup(r => r.FindById(It.IsAny<int>())).Returns(); unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object); var pt = new PhysicalTestResource(unitOfWork.Object); HttpResponseMessage<PhysicalTest> response = pt.GetPhysicalTest(43); Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode) }
I need the Returns() method to return a null object, which is going to be what the actual API method would return if the resource is not found.
I tried sending null as a parameter in the Returns() method but had no success.
You can use Moq to create mock objects that simulate or mimic a real object. Moq can be used to mock both classes and interfaces.
Moq is a mocking framework built to facilitate the testing of components with dependencies. As shown earlier, dealing with dependencies could be cumbersome because it requires the creation of test doubles like fakes. Moq makes the creation of fakes redundant by using dynamically generated types.
With mocks, you can set up the object, including giving parameters and return values on method calls and setting properties. You can also verify that the methods you set up are being called in the tested code. This ensures that the flow of the program is as expected.
You don't indicate what the error was, but this should work:
unitOfWork.Setup(m => m.PhysicalTests).Returns((IRepository<PhysicalTest>)null);
I suspect you tried to call it with Returns(null)
, which causes the compiler to complain since Returns
is overloaded and it doesn't know which method should be called. Casting to a specific type removes the ambiguity.
rt
is a return type of method: FindById
repository.Setup(r => r.FindById(It.IsAny<int>())).Returns(Task.FromResult((rt)null));
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