Мне интересно, возможен ли следующий подход для создания макета, поведение которого было бы унаследовано от фактического экземпляра:
[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 и куча свойств, у меня будет отдельная настройка для каждого из них.
Есть ли ярлык для материала выше?