.NET ヘルプ

C# 単体テスト (開発者はどのように機能するか)

公開済み 2024年4月3日
共有:

C# における単体テストの紹介

ユニットテストソフトウェア開発における重要なフェーズであり、ソースコードの個々のユニットの機能を開発者が検証するのに役立ちます。 C#では、ユニットテストは各コンポーネントやメソッドが様々な条件下で正しく動作することを保証します。 各プログラムの部分を分離し、それぞれの部分がエラーがないことを示すことによって、単体テストはアプリケーションの信頼性に大きく貢献します。 この記事では、C# ユニット・テスト・プロジェクトと.NET 用 IronPDF ライブラリ.

Visual Studioで最初のユニットテストを設定する

ユニットテストプロジェクトの作成

C#でユニットテストを始めるには、まずVisual Studioでユニットテストプロジェクトの1つを設定する必要があります。 Visual Studio には、組み込みの単体テストフレームワークが用意されており、簡単に始めることができます。 新しいプロジェクトを作成するときは、C#カテゴリーの「Unit Test Project」テンプレートを選択してください。 このテンプレートは、ユニットテストを作成し、それを効率的に実行するために必要なすべてを設定します。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace Unit_Test_Project_Example
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnCorrectSum()
        {
            // Arrange
            var calculator = new Calculator();
            // Act
            var result = calculator.Add(2, 2);
            // Assert
            Assert.AreEqual(4, result);
        }
    }
}
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
namespace Unit_Test_Project_Example
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnCorrectSum()
        {
            // Arrange
            var calculator = new Calculator();
            // Act
            var result = calculator.Add(2, 2);
            // Assert
            Assert.AreEqual(4, result);
        }
    }
}
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Namespace Unit_Test_Project_Example
	Public Class Calculator
		Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
			Return a + b
		End Function
	End Class
	<TestClass>
	Public Class CalculatorTests
		<TestMethod>
		Public Sub Add_ShouldReturnCorrectSum()
			' Arrange
			Dim calculator As New Calculator()
			' Act
			Dim result = calculator.Add(2, 2)
			' Assert
			Assert.AreEqual(4, result)
		End Sub
	End Class
End Namespace
VB   C#

テストメソッドとテストクラスの理解

単体テストプロジェクトでは、テストをクラスとメソッドに整理します。 テストクラスは、一緒に実行されるべきユニットテストメソッドの集合を表します。 Each unit test method, decorated with the each unit test method, decorated with the

(それぞれのユニットテストメソッドは、 で修飾されています。 )

やその前の英文 やその前の文詞 モジュール

また、名前を頻出範囲におき、次にヨ文またはモジュール内界*

特定の、特定のスクリプト作成者のコード又は

x-f-c উদাহরণ=又はある方法

'all run vbs Module name'

またそれに数大会日内装飾與

またそれ会

また評価ライン物語はそれ会取り及ビライアン赤語.getTimeが

次以지역特

またテストメソッドが装飾</また装飾デバイスタイア

そしてモジュール[テストメソッド]属性は、コードの特定の関数をテストするためのロジックを含んでいます。 テストクラス自体はでマークされています[テストクラス]テストフレームワークに実行するテストが含まれていることを示す 属性。

テストの実行と理解

Visual Studio のテストエクスプローラーを使用する

Visual Studio Test Explorerウィンドウは、すべてのテストメソッドを実行および管理するための中央ハブです。 すべてのテスト、選択したテスト、または個別のテストを実行することができます。 テストを実行した後、Test Explorer は合格したテストと失敗したテストの詳細な概要を提供し、迅速に問題を特定して対処することができます。

テスト結果の解釈

  • 合格したテスト: これらのテストは正常に実行され、指定された条件下でテストされたコードが期待通りに動作することを示しています。
  • 失敗したテスト: これらは、期待される結果と実際の結果の間に不一致があることを示しており、要求またはテストコードに潜在的なバグや誤解があることを示唆しています。

    失敗したテストを速やかに調査することが重要です。これは、コードベースの問題に対する早期警告の兆候を提供する可能性があるためです。

    C# 単体テスト(開発者向けの動作方法):図1 - Visual Studioにおける合格した単体テストの例

C# ユニットテストを書くための高度なテクニックとベストプラクティス

テストの作成や実行を超えて、C# におけるユニットテストを習得するには、いくつかの高度な技術とベストプラクティスを理解することが必要です。 これらのアプローチは、より効率的で効果的なテストを書くのに役立ち、アプリケーションの信頼性と保守性を確保します。

テストを効果的に整理する

大規模なテストスイートを維持するためには、優れた組織化が重要です。 カバーする機能ごとにテストを論理的にグループ化します。 各テストが何を検証しているかを示すために、テストメソッドおよびクラスにはわかりやすい名前を付けます。 このアプローチによって、特にテストスイートが拡大するにつれて、後でテストを見つけたり理解したりすることが容易になります。

モッキングと依存性注入

コードのテスト中に、外部リソースやアプリケーションの他の部分と相互作用することがよくあります。 そのような場合には、MoqやNSubstituteのようなモックフレームワークを使用してモックオブジェクトを作成してください。 これらのスタンドインは実際のオブジェクトの動作を模倣し、コードを単独でテストすることを可能にします。 依存性注入は、テスト中に実際の依存関係をモックやスタブに置き換えることができるため、コードのテスト可能性を向上させます。

// Example of using a mock
[TestClass]
public class ProductServiceTests
{
    [TestMethod]
    public void GetProductById_ShouldReturnCorrectProduct()
    {
        // Arrange
        var mockRepository = new Mock<IProductRepository>();
        mockRepository.Setup(x => x.FindById(1)).Returns(new Product { Id = 1, Name = "Laptop" });
        ProductService productService = new ProductService(mockRepository.Object);
        // Act
        Product result = productService.GetProductById(1);
        // Assert
        Assert.IsNotNull(result);
        Assert.AreEqual("Laptop", result.Name);
    }
}
// Example of using a mock
[TestClass]
public class ProductServiceTests
{
    [TestMethod]
    public void GetProductById_ShouldReturnCorrectProduct()
    {
        // Arrange
        var mockRepository = new Mock<IProductRepository>();
        mockRepository.Setup(x => x.FindById(1)).Returns(new Product { Id = 1, Name = "Laptop" });
        ProductService productService = new ProductService(mockRepository.Object);
        // Act
        Product result = productService.GetProductById(1);
        // Assert
        Assert.IsNotNull(result);
        Assert.AreEqual("Laptop", result.Name);
    }
}
' Example of using a mock
<TestClass>
Public Class ProductServiceTests
	<TestMethod>
	Public Sub GetProductById_ShouldReturnCorrectProduct()
		' Arrange
		Dim mockRepository = New Mock(Of IProductRepository)()
		mockRepository.Setup(Function(x) x.FindById(1)).Returns(New Product With {
			.Id = 1,
			.Name = "Laptop"
		})
		Dim productService As New ProductService(mockRepository.Object)
		' Act
		Dim result As Product = productService.GetProductById(1)
		' Assert
		Assert.IsNotNull(result)
		Assert.AreEqual("Laptop", result.Name)
	End Sub
End Class
VB   C#

データ駆動テストの活用

データ駆動テストは、異なる入力データを使用して同じテストメソッドを複数回実行することを可能にします。 この手法は、複数のテストメソッドを記述することなく、幅広い入力やシナリオをテストするために特に有用です。 Visual Studio は、インラインデータ、CSVファイル、データベースなどの様々なソースからテストデータを指定することにより、データ駆動テストをサポートします。

効果的にアサートを理解し使用する

アサートはテストメソッドの中心であり、テストの結果を検証します。 テストフレームワークに利用可能な様々なアサートメソッドを理解し、期待される値、例外、または条件を確認するために適切に使用してください。 適切なアサートを使用することで、テストをより明確かつ強固にすることができます。

継続的インテグレーションおよびテスト自動化

単体テストを継続的インテグレーションに統合する(CI)パイプライン。これにより、コードベースに変更が加えられるたびにテストが自動的に実行され、早期に問題を発見して修正することができます。 オートメーションはテストの頻繁かつ一貫した実行を促進し、健全なコードベースを維持するために重要です。

テストコードと本番コードを同期させる

あなたの単体テストは、本番コードとの整合性が取れている限りでしか有効ではありません。 機能の変更が対応する単体テストに反映されていることを確認してください。 この実践により、古いテストが誤って合格することを防ぎ、テストスイートがアプリケーションの状態を正確に反映することを保証します。

失敗するテストから学ぶ

テストが失敗したとき、それは学びと改善の機会です。 失敗するテストは、予期しない動作、不正確な仮定、またはコードが必要以上に複雑でエラーが発生しやすい領域を明らかにする可能性があります。 失敗するテストを注意深く分析して、根本的な原因を理解し、これらの洞察を活用してテストと本番コードの両方を改善してください。

IronPDFの紹介

C# 単体テスト(開発者向けの使い方):図2 - IronPDFウェブサイト

.NET PDF開発のためのIronPDF.NET開発者向けに設計された包括的なライブラリであり、アプリケーション内でPDFドキュメントの生成、操作、および読み取りを可能にします。 IronPDFはPDFファイルの生成機能で知られていますHTMLから直接PDFを生成コード、CSS、画像、およびJavaScriptを使用して最良のPDFを作成します。 それは、Windows、Linux、macOSなどの様々なオペレーティングシステム、およびDockerやAzure、AWSのようなクラウド環境を含む、ウェブやデスクトップアプリケーション、サービスなどの様々な.NETプロジェクトタイプやアプリケーション環境に対応しています。

コード例

以下は、C#の単体テストシナリオでIronPDFを使用する例です。 HTMLコンテンツからPDFを生成する関数をテストしたいとします。 IronPDFを使用してHTMLをPDFとしてレンダリングし、テストの一環としてPDFの存在または内容を検証することができます。

using IronPdf;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.ComponentModel;
using System.IO;
[TestClass]
public class PdfGenerationTests
{
    [TestMethod]
    public void TestHtmlToPdfGeneration()
    {
        IronPdf.License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>");
        string filePath = Path.Combine(Path.GetTempPath(), "test.pdf");
        pdf.SaveAs(filePath);
        Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.");
        // Additional assertions to verify the PDF content could be added here
        // Clean up
        File.Delete(filePath);
    }
}
using IronPdf;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.ComponentModel;
using System.IO;
[TestClass]
public class PdfGenerationTests
{
    [TestMethod]
    public void TestHtmlToPdfGeneration()
    {
        IronPdf.License.LicenseKey = "License-Key";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>");
        string filePath = Path.Combine(Path.GetTempPath(), "test.pdf");
        pdf.SaveAs(filePath);
        Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.");
        // Additional assertions to verify the PDF content could be added here
        // Clean up
        File.Delete(filePath);
    }
}
Imports IronPdf
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Imports System.ComponentModel
Imports System.IO
<TestClass>
Public Class PdfGenerationTests
	<TestMethod>
	Public Sub TestHtmlToPdfGeneration()
		IronPdf.License.LicenseKey = "License-Key"
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, world!</h1>")
		Dim filePath As String = Path.Combine(Path.GetTempPath(), "test.pdf")
		pdf.SaveAs(filePath)
		Assert.IsTrue(File.Exists(filePath), "The generated PDF does not exist.")
		' Additional assertions to verify the PDF content could be added here
		' Clean up
		File.Delete(filePath)
	End Sub
End Class
VB   C#

この例では、IronPDFを使用してHTML文字列からPDFを生成し、一時ファイルとして保存し、ファイルの存在を確認する単純なユニットテストを示します。

C# ユニットテスト(開発者向けの仕組み):図3 - 前のテストが合格した

結論

C# ユニットテスト(開発者向けの仕組み):図4 - IronPDFライセンスページ

単体テストは、ソフトウェア開発ライフサイクルにおいて不可欠な部分です。 効果的なテストを設定し記述し、それらをVisual Studioのテストエクスプローラーで実行し、コードカバレッジツールを使用することにより、C#アプリケーションが信頼性を保ち高い品質基準を維持することを確実にします。 テスト駆動開発の原則を理解し適用することで、C#のユニットテストプロジェクトの品質をさらに向上させることができます。 ユニットテストの目標は、バグを見つけるだけでなく、アプリケーションの堅牢な基盤を作成し、更新、デバッグ、および機能追加を容易にすることです。 IronPDFのライセンスオプションをご覧ください。ライセンスオプションは $749 から始まります。

< 以前
CQRSパターン C#(開発者向けの仕組み)
次へ >
C# URLエンコード(開発者向けの動作方法)