C#單元測試常用 Mocking 類庫及對比
阿新 • • 發佈:2022-05-10
一個優秀的單元測試 Mocking 類庫,需要具備如下幾個特性:
- 易用性:有非常明確的 API ,易於使用並易於記憶。
- 健壯性:行為結果始終一致,並保持準確。
- 幫助性:當程式出錯時,給出儘可能明確的原因提示。
如果我們所使用的類庫沒有滿足上述條件,編寫測試用例的過程將變得複雜和困難,使用類庫不僅沒有節省時間,反而可能使我們更加迷惑。在這種條件下,我們可能更願意刪除測試用例,之前的工作也就浪費了。
在 .NET 世界中,下面是一些框架或類庫的比較:
目前主流的 Mocking 類庫都會支援以下主要功能:
- 無需學習 Record/Replay/Verify 模型,僅需 Mock 你需要的型別,進而
- 無需學習諸如 mock/stub/fake/dynamic/spy 等概念。
- 低學習曲線,API 簡單明確,大部分時間不需要翻閱文件。
- 強型別,可直接使用物件型別配置返回值或約束條件。
- 既可以 Mock 介面型別,也可以 Mock 類型別。
- 支援定義覆蓋,可以覆蓋 Fixture 中的預先配置。
- 當 Mock 類時,可為建構函式傳遞引數。
- 支援攔截和引發事件通知。
- 直觀的支援 out/ref 引數。
下面是一些 Mocking 類庫的連結:
- NSubstitute
- Moq
- Rhino Mocks
-
Microsoft Fakes Commercial (included with Visual Studio 2012 Ultimate)
- NMock
- EasyMock.NET
- TypeMock Isolator Commercial / Paid
- JustMock Free version and Commercial / Paid version
- FakeItEasy
一個優秀的單元測試 Mocking 類庫,需要具備如下幾個特性:
- 易用性:有非常明確的 API ,易於使用並易於記憶。
- 健壯性:行為結果始終一致,並保持準確。
- 幫助性:當程式出錯時,給出儘可能明確的原因提示。
如果我們所使用的類庫沒有滿足上述條件,編寫測試用例的過程將變得複雜和困難,使用類庫不僅沒有節省時間,反而可能使我們更加迷惑。在這種條件下,我們可能更願意刪除測試用例,之前的工作也就浪費了。
在 .NET 世界中,下面是一些框架或類庫的比較:
目前主流的 Mocking 類庫都會支援以下主要功能:
- 無需學習 Record/Replay/Verify 模型,僅需 Mock 你需要的型別,進而驗證結果或行為。
- 無需學習諸如 mock/stub/fake/dynamic/spy 等概念。
- 低學習曲線,API 簡單明確,大部分時間不需要翻閱文件。
- 強型別,可直接使用物件型別配置返回值或約束條件。
- 既可以 Mock 介面型別,也可以 Mock 類型別。
- 支援定義覆蓋,可以覆蓋 Fixture 中的預先配置。
- 當 Mock 類時,可為建構函式傳遞引數。
- 支援攔截和引發事件通知。
- 直觀的支援 out/ref 引數。
下面是一些 Mocking 類庫的連結:
- NSubstitute
- Moq
- Rhino Mocks
- Microsoft Fakes Commercial (included with Visual Studio 2012 Ultimate)
- NMock
- EasyMock.NET
- TypeMock Isolator Commercial / Paid
- JustMock Free version and Commercial / Paid version
- FakeItEasy
出處:https://www.cnblogs.com/gaochundong/p/unit_testing_mocking_libraries_introduction.html