我想測試一些屬於ASP.NET Web Api項目的類。我不需要通過TestServer進行請求 - 響應集成測試(雖然它們很好),但我想盡可能保持我的測試接近「真實」。所以我想用Startup中添加的服務來解決我的類,但是在測試的基礎上通過存根/模擬來改變其中的一些(有些測試需要mock,其他測試則不需要)。如何在ASP.NET Core測試中存根/模擬服務
當ASP.NET沒有內部的依賴注入框架時,在過去很容易做到。所以我只是調用一個類,它將所有依賴項註冊到一個容器,然後爲每個測試創建一個子容器,將一些依賴項改爲嘲笑,就是這樣。
我想是這樣的:
var host = A.Fake<IHostingEnvironment>();
var startup = new Startup(host);
var services = new ServiceCollection();
//Add stubs here
startup.ConfigureServices(services);
var provider = services.BuildServiceProvider();
provider.GetService<IClientsHandler>();
這似乎工作,但我不想創建每個測試的整個啓動基礎設施建設。我想創建一次,然後爲每個測試創建「子容器」或「子範圍」。可能嗎?基本上我正在尋找一種方法來修改啓動以外的服務。
但我不想手動注入模擬接口。我想要使用Services來解析類,並且我想在解析類之前爲某些接口指定mocks。 – SiberianGuy
閱讀完整答案。最後一段僅用於單元測試,大部分答案都是關於集成測試以及它們應該如何完成的。這就是TestServer的用途,它是Startup的用法。您不必使用該請求,但正如第二個代碼示例中所述,您可以從測試服務器實例訪問IServiceProvider – Tseng
因此,您認爲我們應該爲每個測試創建一個新的TestServer?我只是看不到我如何創建一個TestServer併爲每個測試改變依賴關係(對於我需要的某些測試,對於其他我不需要的測試)。 – SiberianGuy