1

我剛開始使用Nunit和WebApi項目進行單元測試。使用Nunit進行單元測試給出了錯誤

我已經開發了一個測試案例我的控制器:

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

阿比控制器:

public class NewsController : ApiController 
{ 
    private readonly INewsBusinessLogic _newsBusinessLogic; 

    public NewsController(INewsBusinessLogic newsBusinessLogic) 
    { 
     _newsBusinessLogic = newsBusinessLogic; 
    } 

    public async Task<IHttpActionResult> Get() 
    { 
     return Ok(await _newsBusinessLogic.GetNewsUpdates()); 
    } 
} 

當我調試我的測試中它給我的NullReferenceException法錯誤,以及我非常清楚What is a NullReferenceException?。但無法弄清楚,爲什麼會發生這種情況以及如何解決這個問題。

邊注:我沒有使用任何ORM。

+1

好一個,你傳遞一個'null'可變進'NewsController'構造函數你有沒有在你的例子,其中一個值分配給顯示'_newsBusinessLogic' – Nkosi

+0

你誤解。在測試中你沒有給變量賦值,所以爲什麼它是空 – Nkosi

回答

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); 
} 
+0

謝謝!,錯誤消失了,但是'actionResult'變爲空結果,請告訴我可能的原因。 –

+0

你在測試安排中爲「ReturnsAsync」設置了什麼? – Nkosi

+0

我已經設置了'List ''''.ReturnsAsync(new List ());' –