在 Xunit 中使用依賴注入

2022-01-10 06:34:51 字數 2463 閱讀 5855

今天介紹乙個基於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.dependencyinjectiontestframework

使得測試執行可以支援依賴注入的方式,

在構建測試類時可以從註冊的服務中獲取構造器所需要的引數

在構建測試方法的時候也可以通過指定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 中使用依賴注入。本系列文章將基於以下基本的軟體執行環境 專案內...