xUnitのテストでは、リファレンスクラスとテスト済みクラスの間でメソッド呼び出し(シーケンスと値)を比較したいと思います。例えばMoqメソッドの呼び出し順序の比較
:
public interface ITarget
{
void A(string val);
void B(int val);
}
public class RefClass
{
private readonly ITarget m_target;
public RefClass(ITarget target) { this.m_target = target; }
public void Work()
{
this.m_target.A("A");
this.m_target.A("B");
this.m_target.B(0);
this.m_target.B(1);
}
}
public class TestClass
{
private readonly ITarget m_target;
public TestClass(ITarget target) { this.m_target = target; }
public void Work()
{
this.m_target.A("B");
this.m_target.B(1);
this.m_target.B(0);
this.m_target.A("A");
}
}
public class WorkTest
{
[Fact]
public void Work_is_done_in_sequence()
{
var refTarget = new Mock<ITarget>();
var refClass = new RefClass(refTarget.Object);
refClass.Work();
var testTarget = new Mock<ITarget>();
var testClass = new TestClass(testTarget.Object);
testClass.Work();
//TODO : compare refTarget and testTarget method call sequence
}
}
私がテストしたクラスは、ターゲット・インタフェースの参照クラスがないとまったく同じ方法を使用することをどのように比較することができますか?ありがとう。
モックと同じ期待される動作を設定し、それらを検証し、テスト中のメソッドを実行することによって。あなたはモックがどのように使用されているかを示していないので、それをどうやって行うのかあなたに教えることはあまりありません。あなたがしようとしていることを適切に表すために使用できる[mcve]を提供してください。 – Nkosi
あなたは1つのモックをセットアップし、それをターゲットクラスで再利用することもできます。同じ期待動作が2回実行されていることを確認できます。 – Nkosi