[英]Mocked Controller returning NULL
我正在使用 xUnit,当我调用控制器的方法时,我得到了null
。 当我调试时,它不会去RemovePrimeNumbers
方法而是返回null 。
发生这种情况有什么原因吗?
测试方法
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);
}
控制器
[HttpGet()]
public string RemovePrimeNumbers(string plainText)
{
PrimeNumberViewModel result = _primeNumberService.RemovePrimeNumbers(plainText);
return result.Result.removedPrimeNumbersText; // *result* is getting NULL
}
你还没有返回值,所以你应该像下面这样返回
var fakePrimeNumberViewModel = new PrimeNumberViewModel { new Result { removedPrimeNumbersText = "HAHAHA 2"} }
_mockService.Setup(x => x.RemovePrimeNumbers("Test123")).Returns(fakePrimeNumberViewModel);
此外,您应该创建一个新的Controller
而不是Mock
它。
var _controller = new PrimeNumberOperationsController(_mockService.Object);
并确保提供给模拟的预期参数与执行测试时使用的参数相同。 例如,在您的示例中,模拟设置为期望"Test123"
但是当测试进行时,它会给出"HAHAHA 2"
,这将导致模拟无法按预期运行。
完整代码:
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");
}
_primeNumberService.RemovePrimeNumbers
上的 Setup 不会触发,它将返回 null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.