C # Microsoft подделывает, чтобы проверить метод, который вызывается в конструкторе - PullRequest
0 голосов
/ 06 июля 2018

Я хочу протестировать публичную функцию в классе 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

...