Тесты Xamarin Android Nunit обнаруживаются в test Explorer, но не обнаруживаются при запуске тестов. (VS2017)

#android #unit-testing #xamarin #visual-studio-2017 #nunit

#Android #модульное тестирование #xamarin #visual-studio-2017 #nunit

Вопрос:

Как следует из названия, я пытаюсь создать несколько тестов для моего приложения для Android, которое использует Xamarin.Android. Я загрузил Nunit VS Templates и создал тестовый проект NUnit 3 (Android), следуя инструкциям, приведенным здесь.

Я могу видеть тест по умолчанию в test Explorer, но если я попытаюсь запустить тесты, я получу следующее в моем окне вывода:

 [18/03/2019 11:24:21 Informational] ------ Discover test started ------
[18/03/2019 11:24:25 Warning] No test is available in C:ProjectNUnit.Tests.Droid1NUnit.Tests.Droid1.csproj C:ProjectSpringboard WarehouseSpringboard Warehouse.csproj. Make sure that test discoverer amp; executors are registered and platform amp; framework version settings are appropriate and try again.
[18/03/2019 11:24:25 Informational] ========== Discover test finished: 0 found (0:00:04.1467419) ==========
[18/03/2019 11:24:51 Informational] ------ Discover test started ------
[18/03/2019 11:24:53 Warning] No test is available in C:ProjectNUnit.Tests.Droid1NUnit.Tests.Droid1.csproj C:ProjectSpringboard WarehouseSpringboard Warehouse.csproj. Make sure that test discoverer amp; executors are registered and platform amp; framework version settings are appropriate and try again.
[18/03/2019 11:24:53 Informational] ========== Discover test finished: 0 found (0:00:01.6753664) ==========
[18/03/2019 11:24:53 Informational] ------ Discover test started ------
[18/03/2019 11:24:54 Informational] NUnit Adapter 3.13.0.0: Test discovery starting
[18/03/2019 11:24:54 Warning] Exception NUnit.Engine.NUnitEngineException, Exception thrown discovering tests in C:ProjectNUnit.Tests.Droid1binDebugNUnit.Tests.Droid1.dll
[18/03/2019 11:24:54 Warning] The NUnit 3 driver cannot support this test assembly. Use a platform specific runner.
[18/03/2019 11:24:54 Warning]    at NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(String testAssemblyPath, IDictionary`2 settings)
   at NUnit.Engine.Runners.DirectTestRunner.LoadDriver(IFrameworkDriver driver, String testFile, TestPackage subPackage)
   at NUnit.Engine.Runners.DirectTestRunner.LoadPackage()
   at NUnit.Engine.Runners.TestDomainRunner.LoadPackage()
   at NUnit.Engine.Runners.DirectTestRunner.EnsurePackageIsLoaded()
   at NUnit.Engine.Runners.DirectTestRunner.Explore(TestFilter filter)
   at NUnit.Engine.Runners.MasterTestRunner.Explore(TestFilter filter)
   at NUnit.VisualStudio.TestAdapter.NUnit3TestDiscoverer.DiscoverTests(IEnumerable`1 sources, IDiscoveryContext discoveryContext, IMessageLogger messageLogger, ITestCaseDiscoverySink discoverySink) in D:reposNUnitnunit3-vs-adaptersrcNUnitTestAdapterNUnit3TestDiscoverer.cs:line 96
[18/03/2019 11:24:54 Warning] Innerexception: System.Runtime.Serialization.SerializationException: Type 'NUnit.Framework.Api.FrameworkController' in assembly 'nunit.framework, Version=3.6.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb' is not marked as serializable.
   at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
   at NUnit.Engine.Drivers.NUnit3FrameworkDriver.CreateObject(String typeName, Object[] args)
   at NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(String testAssemblyPath, IDictionary`2 settings)
[18/03/2019 11:24:54 Informational] NUnit Adapter 3.13.0.0: Test discovery complete
[18/03/2019 11:24:54 Informational] NUnit VS Adapter 2.1.1.0 discovering tests is started
[18/03/2019 11:24:54 Warning] Dependent Assembly Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065 of C:ProjectNUnit.Tests.Droid1binDebugNUnit.Tests.Droid1.dll not found. Can be ignored if not a NUnit C:Project.
[18/03/2019 11:24:54 Warning] Dependent Assembly Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065 of C:ProjectSpringboard WarehousebinDebugSpringboard Warehouse.dll not found. Can be ignored if not a NUnit C:Project.
[18/03/2019 11:24:54 Informational] NUnit VS Adapter 2.1.1.0 discovering test is finished
[18/03/2019 11:24:54 Warning] No test is available in C:ProjectNUnit.Tests.Droid1binDebugNUnit.Tests.Droid1.dll C:ProjectSpringboard WarehousebinDebugSpringboard Warehouse.dll. Make sure that test discoverer amp; executors are registered and platform amp; framework version settings are appropriate and try again.
[18/03/2019 11:24:54 Informational] ========== Discover test finished: 0 found (0:00:01.6691257) ==========
[18/03/2019 11:25:31 Informational] ------ Run test started ------
[18/03/2019 11:25:32 Informational] NUnit Adapter 3.13.0.0: Test execution started
[18/03/2019 11:25:32 Informational] Running all tests in C:ProjectNUnit.Tests.Droid1binDebugNUnit.Tests.Droid1.dll
[18/03/2019 11:25:33 Warning] Exception NUnit.Engine.NUnitEngineException, Exception thrown executing tests
[18/03/2019 11:25:33 Warning] The NUnit 3 driver cannot support this test assembly. Use a platform specific runner.
[18/03/2019 11:25:33 Warning]    at NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(String testAssemblyPath, IDictionary`2 settings)
   at NUnit.Engine.Runners.DirectTestRunner.LoadDriver(IFrameworkDriver driver, String testFile, TestPackage subPackage)
   at NUnit.Engine.Runners.DirectTestRunner.LoadPackage()
   at NUnit.Engine.Runners.TestDomainRunner.LoadPackage()
   at NUnit.Engine.Runners.DirectTestRunner.EnsurePackageIsLoaded()
   at NUnit.Engine.Runners.DirectTestRunner.Explore(TestFilter filter)
   at NUnit.Engine.Runners.MasterTestRunner.Explore(TestFilter filter)
   at NUnit.VisualStudio.TestAdapter.NUnit3TestExecutor.RunAssembly(String assemblyPath, TestFilter filter) in D:reposNUnitnunit3-vs-adaptersrcNUnitTestAdapterNUnit3TestExecutor.cs:line 310
   at NUnit.VisualStudio.TestAdapter.NUnit3TestExecutor.RunTests(IEnumerable`1 sources, IRunContext runContext, IFrameworkHandle frameworkHandle) in D:reposNUnitnunit3-vs-adaptersrcNUnitTestAdapterNUnit3TestExecutor.cs:line 103
[18/03/2019 11:25:33 Warning] Innerexception: System.Runtime.Serialization.SerializationException: Type 'NUnit.Framework.Api.FrameworkController' in assembly 'nunit.framework, Version=3.6.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb' is not marked as serializable.
   at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence securityAttributes)
   at NUnit.Engine.Drivers.NUnit3FrameworkDriver.CreateObject(String typeName, Object[] args)
   at NUnit.Engine.Drivers.NUnit3FrameworkDriver.Load(String testAssemblyPath, IDictionary`2 settings)
[18/03/2019 11:25:33 Informational] NUnit Adapter 3.13.0.0: Test execution complete
[18/03/2019 11:25:33 Informational] NUnit VS Adapter 2.1.1.0 executing tests is started
[18/03/2019 11:25:33 Warning] Dependent Assembly Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065 of C:ProjectNUnit.Tests.Droid1binDebugNUnit.Tests.Droid1.dll not found. Can be ignored if not a NUnit C:Project.
[18/03/2019 11:25:33 Informational] NUnit VS Adapter 2.1.1.0 executing tests is finished
[18/03/2019 11:25:33 Warning] No test is available in C:ProjectNUnit.Tests.Droid1binDebugNUnit.Tests.Droid1.dll. Make sure that test discoverer amp; executors are registered and platform amp; framework version settings are appropriate and try again.
[18/03/2019 11:25:33 Informational] ========== Run test finished: 0 run (0:00:01.7390314) ==========
  

У меня установлены NUnit v3.11.0, nunit.xamarin v3.6.1 и Nunit3TestAdapter v3.13.0 из nuget, а также установлено расширение Nunit 3 Test Adapter. Есть идеи, что может быть причиной этой проблемы?

Ответ №1:

Адаптер тестирования NUnit не поддерживает запуск тестов Android в программе запуска тестов Visual Studio. (Я думаю, что это ограничение программы VS test runner, но я не уверен в этом на 100%!)

Вместо этого вам следует запустить NUnit.Tests.Droid1 как приложение для Android, либо в симуляторе, либо на устройстве. Приложение будет тестовым модулем с графическим интерфейсом, который позволит вам запускать ваши тесты.

Это будет выглядеть примерно так:

введите описание изображения здесь

Еще одна вещь — ваше приложение должно ссылаться на ту же версию NUnit, что и nunit.xamarin — так что вы действительно хотите использовать NUnit 3.6.1, а не NUnit 3.11. В будущем это планируется изменить!

Комментарии:

1. Ах, я не понимал, что это нужно запускать как приложение, спасибо!