C#Microsoft伪造测试在构造函数中调用的方法

时间:2018-07-06 03:56:31

标签: c# microsoft-fakes shim

我想在Manager类中测试公共功能。问题在于该函数在Manager类的构造函数中调用。因此,当我创建Manager的新实例时,该函数也称为。

这里有2个类:一个是Manager类,一个是ManagerTest类,用于测试Manager。

Class Manager.cs

public class Manager
{
    public Manager(ILogger logger, IMonitor monitor)
    {
        //do stuff
        MethodNeedToBeTested();
    }

    public void MethodNeedToBeTested()
    {
    }
}

Class ManagerTest.cs

[TestClass]
public class ManagerTest
{
    [TestMethod]
    [DataTestMethod]
    public async Task TestMethod()
    {
        using (ShimsContext.Create())
        {
            ShimManager.AllInstances.MethodNeedToBeTested = ()=>
            {
                //shim method here
            };
            Manager mng= new Manager(_logger, _monitor);
            mng.MethodNeedToBeTested(); // the problem is that this line goes directly to the shim above, it doesn't go to the real MethodNeedToBeTested()
     }
}

所以基本上,我只想第一次填充MethodNeedToBeTested()方法(调用构造函数时)。

第二次调用MethodNeedToBeTested方法时,它将转到真正的MethodNeedToBeTested()函数,而不是Shim

0 个答案:

没有答案