Я недавно работал с 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? Любая помощь приветствуется!