Что вызывает сообщение "Одобрения не настроены для использования вашей тестовой платформы"?
Что вызывает сообщение "Одобрения не настроены для использования вашей тестовой платформы"?
У нас есть модульное тестирование на основе 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 ответа
Я внес следующие изменения в проект, содержащий мой тестовый код, и эти ошибки были устранены:
- Отключить оптимизацию кода, как предложено Llewellyn
- В расширенных настройках сборки установите для "Отладочная информация" значение "Полный". Он был установлен только для 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?