Moqでprotectedメソッドをモックする
通常は、テストしたいクラスが利用しているクラスのpublicメソッドをモックしますが
たまに自クラスのprotectedメソッドをモックしたい時があります。
(そりゃ設計が悪いって話もあるでしょうが、ここでは置いておきましょう)
こんなクラスがあります。
public class Hoge { public bool Foo() { return Bar(); } protected virtual bool Bar() { return true; } }
Barメソッドをモックしてみます
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Moq.Protected; namespace MoqSample { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { var mock = new Mock<Hoge>(); mock.Protected().Setup<bool>("Bar").Returns(false); Assert.IsFalse(mock.Object.Foo()); } } }
Moq.Protectedをusingしてください。
あとは、まあ見たままですかね
Setupメソッドの型引数なしバージョンだとReturnsが無いので注意