LoginSignup
6
7

More than 1 year has passed since last update.

【C#/単体テスト】単体テストを容易にするモックライブラリ(Moq)の簡単な実装例の紹介

Last updated at Posted at 2021-06-19

概要

Moqの簡単な実装例の紹介 + 役に立った参考サイトのまとめ

Moqとは

Moqは単体テスト用の代替オブジェクトを簡単に作るライブラリ。
オープンソースで商用利用可能(MITライセンス)。
C#の単体テストで使用するライブラリとして、一般的なもの。

Moqの使用上の制約

Moqの簡単な実装例

テスト対象クラスの作成

テスト対象クラス
using System;
namespace MoqTutorial
{
    /// <summary>
    /// 評価対象クラスのインターフェース
    /// 参考
    /// https://github.com/Moq/moq4/wiki/Quickstart
    /// </summary>
    public interface IFooSample
    { 
        bool DoSomething(string value);
    }
    /// <summary>
    /// 評価対象クラス
    /// </summary>
    public class FooSample : IFooSample
    {
        private readonly IFooSample _ifooSampleObject;
        /// <summary>
        /// コンストラクタ・インジェクション
        /// </summary>
        /// <param name="iObject"></param>
        public FooSample(IFooSample iObject)
        {
            _ifooSampleObject = iObject;
        }
        public bool DoSomething(string value)
        {
            var result = _ifooSampleObject.DoSomething(value);
            //結果に応じた処理を記載する
            if (result)
            {
                Console.WriteLine("成功時の処理を書く");
            }
            else
            {
                Console.WriteLine("成功時の処理を書く");
            }
            return result;
        }
    }
}

テストコードの作成

テストコード
using Moq;
using MoqTutorial;
using NUnit.Framework;
namespace TestProject1
{
    [TestFixture]
    public class IFooSampleTest
    {
        [Test]
        public void TestSample_Methoods()
        {
            //Mockを作成(インターフェースを指定)
            var mock = new Mock<IFooSample>();
            //関数名と戻り値を指定
            mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
            //評価対象クラスにMockを渡す
            var fooObject = new FooSample(mock.Object);
            //評価対象クラスで関数コール
            Assert.IsTrue(fooObject.DoSomething("ping"));
        }
    }
}

単体テストコード作成に関しては、Git:Moq Quickstartを参考に実装すると良いと思います。

役に立った参考サイトのまとめ

Moqの解説が参考になったもの

No リンク 説明
1 Moq : Mocking Framework for .NET Moqの説明と実装例がセットで載っている。
Qiitaの記事の中だと、個人的に最も分かりやすかった。
2 Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider SlideShareにMoqの概要・メリットが纏められている。資料が2013年のため、少し古い。

Moqを用いた単体テストコードの作成に役立つもの

No リンク 説明
1 Git:Moq Quickstart Git上にあるMoqのクイックスタートページ。Moqの使い方を詳しく解説したサイトは調べた限りだと、これだけ。
実装例とMoqの使い方が用途毎に記載されている。
2 FAQ FAQページ。
6
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7