Что вызывает сообщение "Одобрения не настроены для использования вашей тестовой платформы"?

Что вызывает сообщение "Одобрения не настроены для использования вашей тестовой платформы"?

У нас есть модульное тестирование на основе ApprovalTests, которое не выполняется при ночной удаленной сборке команды со следующим исключением:


Метод теста Test_CanvasModeConverters вызвал исключение:
System.Exception: Одобрения не настроены для использования вашей тестовой среды.
В настоящее время он поддерживает [NUnit, MsTest, MbUnit, xUnit.net]. Для добавления одного используйте метод ApprovalTests.StackTraceParsers.StackTraceParser.AddParser(), чтобы добавить реализацию ApprovalTests.StackTraceParsers.IStackTraceParser с поддержкой вашей инфраструктуры тестирования. Чтобы узнать, как реализовать один см. http://blog.approvaltests.com/2012/01/creating-namers.html


Этот модульный тест проходит нормально в локальном модульном тесте VS2010 (т. Е. Mstest). Это также проходит нормально в сборке "checkin" удаленной команды (которая запускается при каждой регистрации кода).

Мы зарегистрировали некоторую диагностическую информацию в начале теста, чтобы идентифицировать сборку ApprovalTests.dll, которая находится в игре...

--------------------
ApprovalTests, Version=1.21.4657.21485, Culture=neutral, PublicKeyToken=11bd7d124fc62e0f:
CodeBase = file:///E:/BldSrc/27/305/TestResults/NightlyBuild/Client[2]/Out/ApprovalTests.DLL
FullName = ApprovalTests, Version=1.21.4657.21485, Culture=neutral, PublicKeyToken=11bd7d124fc62e0f
GlobalAssemblyCache = False
ImageRuntimeVersion = v4.0.30319
Location = E:\BldSrc\27\305\TestResults\NightlyBuild\Client[2]\Out\ApprovalTests.dll
Company Name = 
Assembly Product = ApprovalTests
--------------------

Вот трассировка стека...

ApprovalTests.StackTraceParsers.StackTraceParser.Parse(StackTrace stackTrace)
ApprovalTests.Namers.UnitTestFrameworkNamer..ctor()
ApprovalTests.Approvals.<.cctor>b__11()
ApprovalTests.Approvals.GetDefaultNamer()
ApprovalTests.Approvals.Verify(IApprovalWriter writer)
ApprovalTests.Approvals.Verify(String text)
ApprovalTests.Combinations.CombinationApprovals.VerifyAllCombinations[A,B,C,D,E,F,G,H,I](Func`10 processCall, String format, Func`2 resultFormatter, IEnumerable`1 aList, IEnumerable`1 bList, IEnumerable`1 cList, IEnumerable`1 dList, IEnumerable`1 eList, IEnumerable`1 fList, IEnumerable`1 gList, IEnumerable`1 hList, IEnumerable`1 iList)
ApprovalTests.Combinations.CombinationApprovals.VerifyAllCombinations[A,B,C,D,E,F,G,H,I](Func`10 processCall, String format, IEnumerable`1 aList, IEnumerable`1 bList, IEnumerable`1 cList, IEnumerable`1 dList, IEnumerable`1 eList, IEnumerable`1 fList, IEnumerable`1 gList, IEnumerable`1 hList, IEnumerable`1 iList)
ApprovalTests.Combinations.CombinationApprovals.VerifyAllCombinations[A,B](Func`3 processCall, IEnumerable`1 aList, IEnumerable`1 bList)

3 ответа

Я внес следующие изменения в проект, содержащий мой тестовый код, и эти ошибки были устранены:

  1. Отключить оптимизацию кода, как предложено Llewellyn
  2. В расширенных настройках сборки установите для "Отладочная информация" значение "Полный". Он был установлен только для pdb для сборок Release в моем проекте.

Опять же, мне нужно было только внести эти изменения в проект, содержащий мои тесты.

Кроме того, я протестировал аннотацию, предложенную Ллевелином, и это тоже сработало.

Как сказал Грэм:

"Тесты утверждений определяют имя файла подтверждения, обойдя трассировку стека, чтобы получить имя метода тестирования".

Скорее всего, я бы предположил, что ваш компилятор может удалить (вставить) реальный метод тестирования. Вы можете предотвратить это методом с аннотацией

[MethodImpl(MethodImplOptions.NoInlining)]

Или, и я думаю, что это лучший вариант, полностью отключите эту функцию в параметрах компилятора (снимите флажок с кнопки "оптимизировать код" в свойствах проекта).

FWIW, я увидел эту проблему, когда в моем методе тестирования использовался [TestCase(...)] атрибут без [Test]

[TestCase("example")]
public void Broken_Test(string parameter) {
  //...
}

Добавление [Test] атрибут решил проблему

[Test]
[TestCase("example")]
public void Working_Test(string parameter) {
  //...
}

Сертификаты проверок выводят имя файла утверждения путем обхода трассировки стека, чтобы получить имя метода теста.

В вашей трассировке стека нет имени вашего теста, что может означать;

  • что вы не включили полную трассировку стека, которая будет содержать соответствующую информацию, чтобы ответить на ваш вопрос
  • или ваш тест не получает нужную информацию о трассировке стека из-за отсутствия pdb?
Другие вопросы по тегам