我刚开始使用Nunit和我的WebApi项目进行单元测试。
我为我的控制器开发了一个测试用例:
private readonly INewsBusinessLogic _newsBusinessLogic;
[Test]
public async Task GetAllNews()
{
// Arrange
var controller = new NewsController(_newsBusinessLogic);
controller.Configuration = new System.Web.Http.HttpConfiguration();
controller.Request = new System.Net.Http.HttpRequestMessage();
// Act
var actionResult = await controller.Get();
//assert
Assert.IsNotNull(actionResult);
}
Api控制器:
public class NewsController : ApiController
{
private readonly INewsBusinessLogic _newsBusinessLogic;
public NewsController(INewsBusinessLogic newsBusinessLogic)
{
_newsBusinessLogic = newsBusinessLogic;
}
public async Task<IHttpActionResult> Get()
{
return Ok(await _newsBusinessLogic.GetNewsUpdates());
}
}
当我调试我的测试时,它在 Act 上给出了NullReferenceException
错误,我很清楚What is a NullReferenceException?。但无法弄清楚,为什么会发生这种情况以及如何解决它。
旁注:我没有使用任何ORM。
答案 0 :(得分:2)
对于一个人而言,您正在将null
变量传递到NewsController
构造函数中,因为您未在示例中显示将值分配给_newsBusinessLogic
以下是使用Moq如何模拟控制器依赖性
的示例[Test]
public async Task GetAllNews()
{
// Arrange
var newsBusinessLogicMock = new Mock<INewsBusinessLogic>();
newsBusinessLogicMock
.Setup(m => m.GetNewsUpdates())
.ReturnsAsync("{your desired return here}");
var controller = new NewsController(newsBusinessLogicMock.Object);
controller.Configuration = new System.Web.Http.HttpConfiguration();
controller.Request = new System.Net.Http.HttpRequestMessage();
// Act
var actionResult = await controller.Get();
//assert
Assert.IsNotNull(actionResult);
}