使用Nunit进行单元测试会出错

时间:2016-11-21 05:17:31

标签: asp.net-mvc unit-testing asp.net-web-api nunit asp.net-web-api2

我刚开始使用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。

1 个答案:

答案 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);
}