Поведение по умолчанию для mock, унаследованного от экземпляра объекта - PullRequest
0 голосов
/ 14 февраля 2020

Мне интересно, возможен ли следующий подход для создания макета, поведение которого было бы унаследовано от фактического экземпляра:

[TestFixture]
public class Tests
{
    [Test]
    public void DoTest()
    {
        A realA = new A();
        Mock<IA> aMock = CreateMockBasedOnRealA(); ///???

        Assert.That(aMock.Object.Do(1, 2), Is.EqualTo(3));
    }
}

public sealed class A : IA
{
    public int Do(int a, int b)
    {
        return a + b;
    }
}

public interface IA
{
    int Do(int a, int b);
}

Если бы класс A не был запечатан, было бы возможно создать макет, основанный на самом классе, однако я не смогу смоделировать метод Do, потому что он не виртуальный, поэтому я бы сделал что-то вроде этого:

[Test]
public void DoTest()
{
    A realA = new A();
    Mock<IA> aMock = new Mock<IA>(MockBehavior.Strict);
    aMock.Setup(a => a.Do(It.IsAny<int>(), It.IsAny<int>())).Returns((int a, int b) => realA.Do(a, b));
    Assert.That(aMock.Object.Do(1, 2), Is.EqualTo(3));
}

Но тогда, если в моем классе есть десятки методов как Do и куча свойств, у меня будет отдельная настройка для каждого из них.

Есть ли ярлык для материала выше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...