Может ли MS Fakes создавать будущие фиктивные объекты?

В TypeMock вы можете создать будущий фиктивный объект, например:

public class ClassToTest
{   
    public ClassToTest()
    {
        var o = new Foo();
    }
}

[Test]
public void Test()
{
    var fakeFoo = Isolate.Fake.Instance<Foo>();

    Isolate.Swap.NextInstance<Foo>().With(fakeFoo);
}

Имеет ли MS Fakes ту же функциональность, что и выше?


person Jason Evans    schedule 28.11.2013    source источник
comment
Насколько я знаю, это не поддерживается. Подделки по-прежнему предоставляют мощные функции заглушки и насмешек, но я не думаю, что они еще есть.   -  person Spock    schedule 29.11.2013
comment
Да, не выглядит многообещающе :( MS Fakes — хорошая альтернатива фреймворкам с открытым исходным кодом, но я по-прежнему считаю TypeMock инструментом номер 1 для мокинга, который я когда-либо использовал.   -  person Jason Evans    schedule 29.11.2013
comment
На самом деле, если я правильно понимаю, что вы здесь делаете, вы, вероятно, можете сделать это с помощью прокладки. Тем не менее, требуется, чтобы тест знал, что какой-то класс имеет определенную зависимость, которая не является частью его контракта, что на самом деле не очень хорошо.   -  person Magus    schedule 03.12.2013
comment
Ага, хорошо. Я немного разбираюсь в прокладках, но недостаточно, чтобы понять, могут ли они достичь того, что я ищу. Покопаюсь, спасибо за подсказку.   -  person Jason Evans    schedule 03.12.2013
comment
@Magus Нашел это - stackoverflow.com/questions/14916162/   -  person Jason Evans    schedule 03.12.2013


Ответы (1)


Я нашел отличный пример из этого вопроса SO, который демонстрирует, как подделывать будущие экземпляры объектов. Вот пример из этого вопроса:

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        ClassLibrary1.Child myChild = new ClassLibrary1.Child();

        using (ShimsContext.Create())
        {
            ClassLibrary1.Fakes.ShimChild.AllInstances.addressGet = (instance) => "foo";
            ClassLibrary1.Fakes.ShimParent.AllInstances.NameGet = (instance) => "bar";

            Assert.AreEqual("foo", myChild.address);
            Assert.AreEqual("bar", myChild.Name);
        }

    }
}

Похоже, это поможет мне.

person Jason Evans    schedule 03.12.2013