Reputation: 154
I am using xUnit, and when I call the controller's method I am getting null
. When I debugged, It is not going to RemovePrimeNumbers
method but returning null.
Is there any reason why this occurs?
Test Method
public void ControllerTest()
{
PrimeNumberViewModel returnObject = new PrimeNumberViewModel();
returnObject.Result = new PrimeNumberModel();
Mock<IPrimeNumberOperations> _mockService = new Mock<IPrimeNumberOperations>();
var _controller = new PrimeNumberOperationsController(_mockService.Object) ;
_mockService.Setup(x => x.RemovePrimeNumbers("Test123")).Returns(returnObject);
var result = _controller.RemovePrimeNumbers("HAHAHA 2");
Assert.Equal("HAHAHA 2", result);
}
Controller
[HttpGet()]
public string RemovePrimeNumbers(string plainText)
{
PrimeNumberViewModel result = _primeNumberService.RemovePrimeNumbers(plainText);
return result.Result.removedPrimeNumbersText; // *result* is getting NULL
}
Upvotes: 1
Views: 645
Reputation: 14228
You have not returned the value, so you should return like below
var fakePrimeNumberViewModel = new PrimeNumberViewModel { new Result { removedPrimeNumbersText = "HAHAHA 2"} }
_mockService.Setup(x => x.RemovePrimeNumbers("Test123")).Returns(fakePrimeNumberViewModel);
Besides, you should a new Controller
instead of Mock
it.
var _controller = new PrimeNumberOperationsController(_mockService.Object);
And make sure that expected arguments given to the mock are the same used when exercising the test. For instance, in your example, the mock was setup to expect "Test123"
but when the test is exercising it is given "HAHAHA 2"
which will cause the mock to not behave as expected.
Full code:
public void ControllerTest()
{
//Arrange
string plainText = "Test123";
string expected = "HAHAHA 2";
Mock<IPrimeNumberOperations> _mockService = new Mock<IPrimeNumberOperations>();
var fakePrimeNumberViewModel = new PrimeNumberViewModel {
new Result { removedPrimeNumbersText = expected}
};
_mockService
.Setup(x => x.RemovePrimeNumbers(plainText))
.Returns(fakePrimeNumberViewModel);
var _controller = new PrimeNumberOperationsController(_mockService.Object);
//Act
var actual = _controller.RemovePrimeNumbers(plainText);
//Assert
Assert.AreEqual(expected, actual, "Error message");
}
Upvotes: 5
Reputation: 1261
_primeNumberService.RemovePrimeNumbers
won't trigger and it will return nullUpvotes: 1