Skip to content

MS_NUnit

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

NUnit

概要

CI的に、Jenkinsから、
NUnit + OpenCover + ReportGenerator でテスト自動化すると強力です。

  • ただし、単体テストコード開発には相応の工数がかかるため、
    インクリメンタル開発でない受託開発の場合は工数削減にならない可能性があります。

  • 共通部品の範囲などはコレでいいかもしれませんが、
    DBMS アプリケーションの場合、アサートの実装なども難しくなるので検討が必要。

  • ご参考(テスト・コード)
    https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Tests/Public.Test

    ビルドして下位フォルダのバッチを起動すると、
    テストが実行され、カバレージ レポートまで取得できます。

補足(この見立ては現在も妥当): 「共通部品には向くが、
DBMS アプリケーションではアサートが難しい」という指摘は、
テストしやすさは対象の性質で決まるという本質を突いている。

対象 単体テストの向き不向き
共通部品・ドメインロジック(副作用なし) 向く。入力と出力が閉じている
DB アクセスを伴う処理 状態の準備と後片付けが要る。アサートも「DB の状態」になる
画面・外部 I/O さらに難しい。統合テスト側で担保する

DB を伴うテストで現在採られる手法は以下。

  • Testcontainers で実 DBMS をコンテナ起動し、テストごとに使い捨てる
  • トランザクションで囲み、テスト終了時にロールバックする
  • リポジトリをインターフェースで抽象化し、ロジック側は差し替えでテストする

なお、EF Core の InMemory プロバイダはテストに使わない
(制約やトランザクションを再現しないため。
Entity Framework Core参照)。

詳細

補足(.NET の主要な xUnit 系フレームワーク): NUnit のほかに
選択肢が 2 つある。現在は新規プロジェクトで xUnit.net が選ばれることも多い。

NUnit MSTest xUnit.net
提供元 コミュニティ Microsoft コミュニティ(NUnit の作者が関与)
テスト属性 [Test] / [TestFixture] [TestMethod] / [TestClass] [Fact] / [Theory]
パラメータ化 [TestCase] [DataRow] [Theory] + [InlineData]
インスタンス クラスで共有 クラスで共有 テストごとに新規生成(並列実行に強い)

いずれも dotnet test から実行でき、CI への組み込み方は同じである。

補足(最新化:実行とカバレッジ): 元ページの構成
(NUnit + OpenCover + ReportGenerator を Jenkins から起動)は、
.NET Framework 時代のものである。
現在は dotnet CLI に統合されている。

dotnet test --collect:"XPlat Code Coverage"
reportgenerator -reports:**/coverage.cobertura.xml -targetdir:coveragereport
  • テストランナー: dotnet test(NUnit3TestAdapter を参照)
  • カバレッジ: Coverlet--collect で有効。クロスプラットフォーム)
  • レポート: ReportGenerator(現在も現役)

OpenCoverは Windows 専用かつ開発が止まっているため、
新規では Coverlet を使う。

参考

関連


Tags: 移行, .NET開発, テスト, デバッグ, ツール類, CI

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally