MSTest と Moq を使用してテストコードを書いてみました。
環境
- Visual Studio 2017
インストール方法などは以下の記事を参照してください。
テストしたいコード
namespace Hoge
{
public interface ICalculation
{
// 加算を行うメソッド
int Add(int x, int y);
}
// このクラスは ICalculation に依存しているため、
// ICalculation が実装されていないとテストができない
// そこで Moq を使ってテストする
public class Calculation
{
ICalculation hoge;
public Calculation(ICalculation hoge)
{
this.hoge = hoge;
}
// 加算結果を2倍にして返すメソッド
public int AddDouble(int x, int y)
{
return hoge.Add(x, y) * 2;
}
}
}
テストコード
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
namespace Hoge.Tests
{
// Calculation のテストクラス
[TestClass()]
public class CalculationTests
{
// AddDouble のテストメソッド
[TestMethod()]
public void AddDoubleTest()
{
// AddDouble をテストするためには ICalculation の Add が実装されている必要がある
// なので、ICalculation のモックを作成する
var mock = new Mock<ICalculation>();
// Add メソッドの動作を定義する
// ここでは引数として 2 と 3 を与えた時に 5 を返すように定義している
mock.Setup(m => m.Add(2, 3)).Returns(5);
// モックの準備が完了したので、テストコードを書く
// モックを引数で渡してテスト対象のクラスをインスタンス化する
var target = new Calculation(mock.Object);
// 実行と結果の判定
Assert.AreEqual(10, target.AddDouble(2, 3));
}
}
}