声明私有方法的执行顺序

时间:2018-11-16 16:24:12

标签: c# unit-testing reflection mocking

我要测试的是调用三个私有方法Fooboo1boo2的方法boo3确实按照此确切顺序进行调用(这是一个简化实际情况。

要测试我计划使用InSequence对象的Mock方法的顺序。

要测试我打算使用PrivateObject类的私有方法。

我不知道如何将两者结合起来。这是到目前为止我尝试过的,但是似乎没有用!

public class TestedClass
{
    private void _boo1(object someParam)
    {
        //some logic
    }
    private void _boo2(object someParam)
    {
        //some logic
    }
    private void _boo3(object someParam)
    {
        //some logic
    }
    public void Foo(object someParam)
    {
        _boo1(someParam);
        _boo2(someParam);
        _boo3(someParam);
    }
}

这里是我到目前为止创建的测试方法:

[TestMethod]
public void TestSequence()
{
        var sequence = new MockSequence();
        var mockedObject = new Mock<TestedClass>();
        PrivateObject obj = new PrivateObject(mockedObject);
        mockedObject.Object.Foo(It.IsAny<Object>());

        mockedObject.InSequence(sequence).Setup(x => obj.Invoke("_boo1", BindingFlags.Default, It.IsAny<Object>()));
        mockedObject.InSequence(sequence).Setup(x => obj.Invoke("_boo2", BindingFlags.Default, It.IsAny<Object>()));
        mockedObject.InSequence(sequence).Setup(x => obj.Invoke("_boo3", BindingFlags.Default, It.IsAny<Object>()));
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

为什么不使用System.IO将状态消息写入日志文件?您还可以使用System.Diagnostics来获取当前所在方法的名称:

string methodName = new StackTrace().GetFrame(0).GetMethod().Name