今天介紹乙個基於xunit和微軟依賴注入框架的「真正」的依賴注入使用方式 ———xunit.dependencyinjection
, 來自大師的作品,讓你在測試**裡使用依賴注入像 asp.net core 一樣輕鬆
在 xunit 測試專案裡新增對xunit.dependencyinjection
的引用
dotnet add package xunit.dependencyinjection
需要實現自己的乙個startup
,在startup
裡進行服務註冊和初始化
// 這裡需要指定乙個 assembly attribute 用來讓 xunit 尋找測試入口,使用自定義的測試框架
// testframework 第乙個引數是 startup 類的 fullname(包含命名空間),第二個引數是測試專案的程式集名稱
[assembly: testframework("xunitdependencyinjectionsample.startup", "xunitdependencyinjectionsample")]
namespace xunitdependencyinjectionsample
// 重寫 createhostbuilder 這個方法,在這裡進行配置註冊和服務註冊
protected override ihostbuilder createhostbuilder(assemblyname assemblyname)});
})// 註冊自定義服務
.configureservices((context, services) =>});
return hostbuilder;
}protected override void configure(iserviceprovider provider)}}
createhostbuilder
其實就是 asp.net core 裡的建立乙個hostbuilder
,註冊配置/服務和 asp.net core 裡一模一樣,有資料或配置需要在專案啟動時初始化的,可以放在configure
方法做,有點類似於 asp.net core 裡startup
中的configure
方法,只是這裡我們不需要配置 asp.net core 的請求管道
上面的startup
配置好以後就可以在測試**裡盡情使用依賴注入了,來看下面的兩個示例:
首先我們可以測試一下內建的服務,就拿iconfiguration
來測試吧
再來測試一下我們自定義註冊的服務:
ioutputhelper
是 xunit 提供的,可以在執行測試的時候輸出一段文字(使用console.writeline
是看不到輸出的哦)
來看一下測試結果
xunit.dependencyinjection
是乙個開源專案,你可以在 github 上獲取到原始碼
xunit.dependencyinjection
重寫了一套基於microsoft.extensions.dependencyinjection
testframework
,
使得測試執行可以支援依賴注入的方式,
在構建測試類時可以從註冊的服務中獲取構造器所需要的引數
在構建測試方法的時候也可以通過指定fromservices
來從註冊的服務中獲取對應的服務從而實現方法引數的注入
重寫的 xunit 的類如下
從 5.0 版本開始直接依賴於microsoft.extensions.hosting
,使用通用主機來構建依賴注入測試框架,
這樣使得我們更方便整合configuration
,更像 asp.net core 的配置,更簡潔
大師寫的專案真心不錯,但是大師太低調了,寫的很多很實用的專案,攜程的阿波羅的 dotnetcore 支援就是大師一直在維護,,大家快去 github follow 他吧
大師最近在寫乙個netcache
的開源專案,乙個快取框架,感興趣的可以去看一下,給大師提點 feature ,
依賴注入有點 在 Xunit 中使用依賴注入
今天介紹乙個基於xunit和微軟依賴注入框架的 真正 的依賴注入使用方式 xunit.dependencyinjection,來自大師的作品,讓你在測試 裡使用依賴注入像 asp.net core 一樣輕鬆 在 xunit 測試專案裡新增對xunit.dependencyinjection的引用 d...
更優雅的在 Xunit 中使用依賴注入
上次我們已經介紹過一次大師的xunit.dependencyinjection,最近大師完成了 7.0 的重構並且已經正式發布,已經可以直接安裝使用了 7.0 為我們帶來了更好的程式設計體驗,在 6.x 的版本中,我們的startup需要繼承於dependencyinjectiontestframe...
在C 中使用依賴注入
依賴注入 dependency injection,縮寫為di 是一種實現 inversion of control,縮寫為ioc 的方法。在編寫c 時,使用這種方法能夠解決一些場景的需求。本系列將通過若干個實際問題,向讀者介紹如何在c 中使用依賴注入。本系列文章將基於以下基本的軟體執行環境 專案內...