по сравнению с 2012: Компиляция прокладок

Я пытаюсь сделать прокладку в VS 2012 Ultimate, как описано на сайте MSDN:

[TestClass]
public class TestClass1
{ 
    [TestMethod]
    public void TestCurrentYear()
    {
        int fixedYear = 2000;

        using (ShimsContext.Create())
        {
          // Arrange:
          // Detour DateTime.Now to return a fixed date:
          System.Fakes.ShimDateTime.NowGet = 
              () =>
              { return new DateTime(fixedYear, 1, 1); };

          // Instantiate the component under test:
          var componentUnderTest = new MyComponent();

          // Act:
          int year = componentUnderTest.GetTheCurrentYear();

          // Assert: 
          // This will always be true if the component is working:
          Assert.AreEqual(fixedYear, year);
        }
    }
}

см. http://msdn.microsoft.com/en-us/library/hh549176.aspx

Но когда я компилирую свой тестовый проект, я получаю понятие в выводе:

предупреждение: некоторые подделки не могут быть сгенерированы. Для получения полной информации установите для атрибута диагностики элемента Fakes в этом файле значение «true» и перестройте проект.

Как я могу решить это предупреждение?


person alerya    schedule 28.12.2012    source источник
comment
Описано в какой статье MSDN? У нас недостаточно информации, чтобы даже начать гадать об ответе.   -  person Oded    schedule 28.12.2012
comment
Отредактировано. Теперь откатите вас -1   -  person alerya    schedule 28.12.2012


Ответы (3)


В Visual Studio 2012 Update 1 улучшена генерация кода в Fakes, чтобы упростить устранение проблем с генерацией кода. Всякий раз, когда Stub или Shim не могут быть сгенерированы для определенного типа, Fakes теперь может генерировать предупреждающее сообщение — вы можете увидеть это в окне Error List в Visual Studio.

Однако, чтобы предотвратить чрезмерное количество предупреждений для большой сборки, такой как System, Fakes по умолчанию создает одно предупреждение. Чтобы просмотреть полный список предупреждающих сообщений, установите для атрибута Diagnostic XML-элемента Fakes в файле .Fakes значение "true" или "1" и перестройте проект. (См. пример в первой строке кода ниже.)

Чтобы устранить предупреждение, измените файл .Fakes, чтобы он генерировал только те заглушки и прокладки, которые вам нужны в ваших тестах. Подробности здесь здесь полный список доступных параметров

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
  <Assembly Name="System" Version="4.0.0.0"/>
  <StubGeneration Disable="true" />
  <ShimGeneration>
    <Clear/>
    <Add FullName="System.DateTime!"/>
  </ShimGeneration>
</Fakes>
person Oleg Sych    schedule 28.12.2012
comment
Есть ли способ подавить предупреждающие сообщения? Я установил для диагностики значение false, а для подробностей — критическое, но я все еще получаю предупреждения о том, что некоторые подделки не могут быть сгенерированы. - person Zorayr; 21.08.2013
comment
да. Используйте подход, описанный в этом ответе, для создания только тех типов заглушек и прокладок, которые вам нужны. Не указывайте типы, которые нельзя заглушить или заглушить. - person Oleg Sych; 22.08.2013
comment
Привет! У меня возникли некоторые проблемы с попыткой добавить только определенные прокладки или заглушки, параметры Rebuild/Clean из Visual Studio не удаляют предварительно скомпилированные Fakes Assemblies, поэтому, если у кого-то возникнут проблемы с этим, помните, удалите папку FakesAssemblies вручную. - person juan25d; 28.06.2014
comment
Есть ли способ подавить даже одно предупреждение, сгенерированное, когда диагностика = ложь. Невозможно составить список нужных или подлежащих удалению. Разве мы не можем просто подавить все предупреждения о подделках? - person Rahul; 08.08.2017

Я решил это уже один.

Это был .Net Framework 4.0 в собственности.

Переход на 4.5 решает проблему.

person alerya    schedule 28.12.2012
comment
Хотя изменение целевой версии .NET Framework в вашем проекте модульного тестирования может снизить вероятность обнаружения типа, который не поддерживается Fakes, это не устраняет это предупреждающее сообщение напрямую. - person Oleg Sych; 28.12.2012
comment
Con вы объясните, как вы понимаете, что «это был .Net Framework 4.0 в собственности»? - person Gheorghe Bulicanu; 25.03.2013
comment
Собственность проекта. Я использовал .net 4.0. Но нужно 4,5 - person alerya; 25.03.2013
comment
Ответ @OlegSych должен быть помечен здесь как правильный - его ответ более актуален для вопроса, чем то, что в настоящее время помечено как ответ. - person Rockdocta; 01.04.2013

Попробуйте удалить этот файл .Fakes. Я удалил их случайно и скомпилировал, и предупреждения исчезли. Я не уверен, что такое влияние, но все, кажется, работает нормально. Я думаю, что это заставляет компилятор перекомпилировать файл подделок всего, что есть в сборке.

person Makubex    schedule 18.09.2013
comment
Если вы удалите файл .fakes, вы лишите возможности делать подделки. Это полностью уничтожило бы цель. - person crthompson; 04.08.2015