Игнорировать Игнорировать Атрибут
У нас есть тесты MSTest, которые автоматически запускаются при почасовом производстве. Один из этих тестов отмечен [Ignore]
атрибут, потому что он еще не готов запустить его в нашей производственной среде.
Теперь я хочу запустить этот тест (только) в моей локальной среде, потому что моя локальная среда готова к этому тесту.
Я пытаюсь запустить этот тест, щелкнув значок ReSharper в левой части кода теста или щелкнув значок " Выполнить выбранные тесты" в окне " Сеансы модульных тестов", и ничего не происходит.
Я исправляю это сейчас, комментируя [Ignore]
линия. Но теперь мне нужно знать, чтобы удалить символы комментария (//
) перед проверкой кода.
Есть ли другой способ временно запустить [Ignore]
проверить?
5 ответов
Недавно, когда я столкнулся с такими проблемами, я добавил новую конфигурацию сборки в проект Visual Studio с именем что-то вроде "Отладка локального разработчика" и использую параметры из существующей конфигурации отладки. Затем я перехожу к "Project -> MyProjectName Properties -> Build", проверяю, что "Local Developer Debug" является выбранной конфигурацией, и добавляю "LOCALDEVBUILD" к "Условным символам соответствия". Это позволяет использовать директивы препроцессора для "переключения" кода во время компиляции:
#if (!LOCALDEVBUILD)
[Ignore]
#endif
Не уверен, что это то, что вы ищете... но он позволяет вам запускать / использовать определенный код в зависимости от намерений сборки (через конфигурацию сборки)... С помощью этого метода вы можете оставить тест проигнорированным для больше "официальных" сборок, но все равно выполняйте их на досуге, если хотите.
Вы также можете использовать категорию теста, чтобы отметить методы тестирования, которые вы не хотите включать в свой автоматический тест, например,
[TestCategory("IgnoreOnBuild")]
Таким образом, не используется атрибут [Ignore]. И объедините это с фильтром в определении вашей сборки, в разделе Основные -> Автоматизированный тест -> Источник теста -> Фильтр тестового набора:
TestCategory!=IgnoreOnBuild
Похоже, есть другие способы включить / отключить тесты с помощью файла testrunconfig. Однако, если вы используете IgnoreAttribute, он компилируется с кодом и поэтому не может быть легко переключен.
Из документации:
Атрибут Ignore для модульного теста находится в исходном файле модульного теста вместе с другими атрибутами и исходным кодом теста. Это означает, что если вы отключите модульный тест в окне "Диспетчер тестов", а затем запустите тест с помощью утилиты командной строки MSTest.exe, тест все равно будет запущен. Но если вы пометите модульный тест с атрибутом Ignore, скомпилируете сборку и затем запустите тест с помощью MSTest.exe, тест не запустится. Он не запускается, потому что атрибут Ignore стал частью теста.
У меня другой подход. Это автоматически удаляет атрибуты [Игнорировать] на стороне разработчика.
- Добавлять
Directory.Build.targets
в корневую папку тестов
<Project>
<PropertyGroup Condition="'$(CI)' == 'true'">
<DefineConstants>$(DefineConstants);CONTINUOUS_INTEGRATION_BUILD</DefineConstants>
</PropertyGroup>
</Project>
- Добавьте этот код в локальные тесты:
#if CONTINUOUS_INTEGRATION_BUILD
[Ignore]
#endif
Вы также можете проверить возможные переменные среды CI здесь: https://github.com/dotnet/reproducible-builds/blob/f41ae4c0a4400acce7797691d69134f2562b26b0/src/DotNet.ReproducibleBuilds/DotNet.ReproducibleBuilds.props#L32
Как упоминал @Lasse, можно установить
[TestCategory("DockerEnvironmentRequired")]
. В дополнение к этому вы можете установить фильтр в своих локальных настройках .runsetting, который включает или исключает тесты с указанной TestCategory.
Пример теста:
[TestClass]
[TestCategory("DockerEnvironmentRequired")]
public class MyTests
{
[TestMethod]
public async Task XXX_ShouldSuccess()
{
...
}
}
Пример внешней среды сборки .runsettings:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<TestRunParameters>
...
</TestRunParameters>
<RunConfiguration>
<TestCaseFilter>TestCategory!=DockerEnvironmentRequired</TestCaseFilter>
</RunConfiguration>
</RunSettings>
Локально вы должны удалить узел TestCaseFilter в настройках .runsettings, чтобы запустить их.
Альтернатива с CLI: dotnet test --filter TestCategory!=DockerEnvironmentRequired