2017-03-20 76 views
0

當需要依賴注入時,我無法找到足夠的有關如何在asp.net核心中測試控制器和類的信息。使用nunit進行Asp.net核心單元測試

使用NUnit,如何測試一類是這樣的:

public class EventServices : Service<EventBase>, IEventServices 
{ 
    private readonly IMemoryCache memCache; 
    private readonly UserManager<ApplicationUser> userManager; 
    private readonly IHttpContextAccessor accessor; 

    public EventServices(
     IRepository<Evento> repository, 
     IMemoryCache memCache, 
     UserManager<ApplicationUser> userManager, 
     IHttpContextAccessor accessor 
    ) : base(repository) 
    { 
     this.memCache = memCache; 
     this.userManager = userManager; 
     this.accessor = accessor; 

    } 

    public IQueryable<Evento> MyMethod(string message) 
    { 
    .... 

這CLASSE在啓動類註冊:

services.AddScoped<IEventServices, EventServices>(); 

喜歡在構造函數中的其他類。

+1

抽象所有必要的依賴關係,以便它們可以輕鬆地在模型測試中進行模擬和注入。顯示待測方法的[mcve]和期望的行爲。 – Nkosi

回答

1

如何在ASP.NET Core應用程序的運行時配置該服務與您將如何測試它無關。爲了測試它,你應該只需要new並將其依賴關係傳遞給它。如果他們與基礎設施(網絡服務器,數據庫等)緊密耦合,那麼使用類似Moq的工具來嘲笑他們。請記住,單元測試只應該測試你的代碼,而不是所有的依賴。

現在,如果您想測試ASP.NET Core如何與您的服務和DI配置一起工作,那是一種不同的測試。爲此,您正在使用集成或功能測試。有一個關於如何做到這本使用ASP.NET核心和TestServer型這裏良好的文檔: https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/testinghttps://docs.microsoft.com/en-us/aspnet/core/testing/integration-testing

基本上,你可以使用TestServer來承載您的應用程序在內存中,你可以調整你如何配置您的應用使用Startup,以便測試更容易(例如,使用InMemory數據庫而不是真實數據庫)。然後,您可以直接從您的測試中發出請求並獲取回覆,但所有內容都會很快。他們不是單元測試,但他們幾乎一樣快,可以做你想找的東西。

這些例子都使用xUnit,它與NUnit非常相似。如果您只是切換到xUnit,您可能會發現它更容易,因爲這是ASP.NET Core的所有示例使用的內容,但如果您致力於使用NUnit,則語法更改很少。

相關問題