-
Notifications
You must be signed in to change notification settings - Fork 0
MS_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 時代のものである。
現在はdotnetCLI に統合されている。dotnet test --collect:"XPlat Code Coverage" reportgenerator -reports:**/coverage.cobertura.xml -targetdir:coveragereport
- テストランナー:
dotnet test(NUnit3TestAdapter を参照)- カバレッジ: Coverlet(
--collectで有効。クロスプラットフォーム)- レポート: ReportGenerator(現在も現役)
OpenCoverは Windows 専用かつ開発が止まっているため、
新規では Coverlet を使う。
- NUnit
https://nunit.org/ - .NET アプリの単体テスト | Microsoft Learn
https://learn.microsoft.com/ja-jp/dotnet/core/testing/
- テスティング・フレームワーク / テスト自動化
- CI / Jenkins / ビルド
Tags: 移行, .NET開発, テスト, デバッグ, ツール類, CI
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。