Специальный тестовый адаптер для VS 2022C#

Место общения программистов C#
Ответить
Anonymous
 Специальный тестовый адаптер для VS 2022

Сообщение Anonymous »

Я столкнулся с проблемой при создании тестового адаптера для пользовательского средства запуска тестов (он не использует mstest, nunit и т. д.).
Итак, эти тесты запускаются через специальный файл .exe, а VS этого не делает. не вижу эти тесты (не отображаются в обозревателе тестов).
Я нашел несколько ссылок с информацией о тестовом адаптере (как его создать, как добавить в VS).
Но я попробовал много разных способов, они вообще не работают. Я добавил свой тестовый адаптер как vsix, как пакет nuget, как dll, используя vstest.console.exe (я даже полностью справляюсь с примером XmlTestAdapter).
К сожалению, это не работает,
я использовал эту ссылку как база:
https://github.com/microsoft/vstest/blo ... ibility.md
Я сделал все так же, как на этой странице (все интерфейсы, все атрибуты, файл .runsettings), но я все еще не вижу пользовательского средства обнаружения и тестов в целом
И было бы здорово, если бы кто-нибудь спросил, как это отладить (vsix, nuget)
Ребята, есть ли у вас хороший пример, который работает для VS 2022, или может вы поможете с этим разобраться, пожалуйста
Вижу, что пакет установился, ошибок нет и в данном случае не могу понять, добавлен он или нет

Код: Выделить всё

[FileExtension(".dll")]
[DefaultExecutorUri(ExecutorUriString.ExecutorString)]
public class CustomTestDiscoverer : ITestDiscoverer
{
public void DiscoverTests(
IEnumerable sources,
IDiscoveryContext discoveryContext,
IMessageLogger logger,
ITestCaseDiscoverySink discoverySink)
{
logger.SendMessage(TestMessageLevel.Informational, "Start test discoverer");
foreach (var source in sources)
{
logger.SendMessage(TestMessageLevel.Informational, $"Check source file: {source}");
GetTests(source).ToList().ForEach(discoverySink.SendTestCase);
}
}

public static IEnumerable GetTests(string source)
{
var tests = new List();
var testClassAttr = "TestClass";
var testCaseAttr = "TestCase";
var assembly = System.Reflection.Assembly.LoadFrom(source);
var testClasses = assembly.GetTypes().Where(type => type.BaseType.Name.EndsWith(testClassAttr)).ToList();
var methods = testClasses.SelectMany(type => type.GetMethods())
.Where(method => method.CustomAttributes.Any(attr => attr.AttributeType.Name.EndsWith(testCaseAttr)))
.ToList();
methods.ForEach(method =>
{
var attr = method.CustomAttributes.First(attr => attr.AttributeType.Name.EndsWith(testCaseAttr));
tests.Add(new TestCase(method.Name, ExecutorUriString.ExecutorUri, source));
});
return tests;
}
}

Код: Выделить всё

[ExtensionUri(ExecutorUriString.ExecutorString)]
public class CustomTestExecutor : ITestExecutor
{
private bool _isCanceled = false;

public void Cancel()
{
_isCanceled = true;
}

public void RunTests(IEnumerable? tests, IRunContext? runContext, IFrameworkHandle? frameworkHandle)
{
foreach (var test in tests)
{
if (_isCanceled) break;
var result = new TestResult(test)
{
Outcome = TestOutcome.Passed,
ErrorMessage = "Error message if any",
ErrorStackTrace = "Stack trace if any"
};
frameworkHandle.RecordResult(result);
}
}

public void RunTests(IEnumerable? sources, IRunContext? runContext, IFrameworkHandle? frameworkHandle)
{
var tests = new List();
foreach (var path in sources)
{
if (_isCanceled) break;
tests.AddRange(CustomTestDiscoverer.GetTests(path));
}
RunTests(tests, runContext, frameworkHandle);
}
}
Реализовал запрошенные интерфейсы, использовал инструкцию Microsoft, добавил этот тестовый адаптер как vsix, nuget, простую dll, попытался увидеть средство обнаружения тестов через vstest.console

Подробнее здесь: https://stackoverflow.com/questions/790 ... or-vs-2022
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»