Родинки/подделки :Как реализовать тестовую настройку?

Я недавно работал с Moles, и теперь я перехожу на Fakes. В моем старом тестовом проекте у меня была тестовая установка, которая выглядела так:

[TestInitialize]
public void Setup()
{
    //...
}

Там я сделал некоторые необходимые настройки, такие как настройка некоторых моих объектов родинок.

Метод тестирования в кротах выглядел примерно так (с также [HostType ("Moles" )], указывающим, что он использует объекты кротов.

[TestMethod]
[HostType("Moles")]
public void MolesTestMethod()
{
    //...
}

Теперь в Fakes больше не используют атрибут HostType. Вместо этого они используют ShimsContext, в котором вы можете использовать свои «издевательские» классы. Выглядит это как-то так:

[TestMethod]
public void FakesTestMethod()
{
    using (ShimsContext.Create())
    {
        //...
    }
}

Если вы не используете этот контекст, вы можете получить сообщение об ошибке. В основном это говорит о том, что в FakesTestMethod было ShimInvalidOperationException, и вы должны использовать ShimsContext.Create ()способом, описанным ниже )

-- C#:
using Microsoft.QualityTools.Testing.Fakes;

using(ShimsContext.Create())
{
    // your test code using Shims here
}

-- VisualBasic.NET
Imports Microsoft.QualityTools.Testing.Fakes

Using ShimsContext.Create
    ' your test code using Shims here
End Using  

. Поэтому я попытался поместить свои вызовы настройки в этот контекст и в итоге получил что-то вроде этого:

[TestInitialize]
public void Setup()
{
    using(ShimsContext.Create())
    {
        //...
    }
}

Теперь, если я использую этот контекст в своем методе установки, вся настройка, которая там выполняется, впоследствии вырвется из контекста и больше не будет действительна, когда модульные тесты действительно собираются запускаться, что на самом деле не то, что я хочу от метод настройки теста.

Я исправил эту проблему, поместив использование внутри самого тестового метода и просто вызвав приватный метод установки прямо в этом контексте и перед тестовым кодом. Этот метод установки теперь выполняет всю обработку, которую раньше выполнял метод установки [TestInitialize]. Код выглядит примерно так:

[TestMethod]
public void PerformActionFromConfigActionStateActionIdIsSet()
{
    using (ShimsContext.Create())
    {
        Setup();

        //...
    }
}

Моя проблема с этой проблемой заключается в том, что это решение полностью «убивает» идею метода установки [TestInitialize].Я должен продублировать этот код в КАЖДОМ методе тестирования, и самая важная часть :объекты, созданные в этом методе настройки (), будут создаваться и уничтожаться для КАЖДОГО теста, что совсем не идеально!

Есть ли другой способ настроить тестовые данные в Fakes? Любая помощь приветствуется!

6
задан Thomas Mondel 18 August 2012 в 10:12
поделиться