Как автоматизировать тестовый проект Android NUnit?
Примечание.
В этом руководстве объясняется, как автоматизировать тестовый проект NUnit на Android, а не проект Xamarin.UITest. Сведения о Xamarin.UITest см . здесь.
При создании проекта Приложение модульного тестирования (Android) в Visual Studio (или проект Модульный тест Android в Visual Studio для Mac), этот проект не будет автоматически выполнять тестовые проекты по умолчанию. Для выполнения тестовых проектов NUnit на целевом устройстве можно создать подкласс Android.App.Instrumentation, запущенный с помощью следующей команды:
adb shell am instrument
Приведенные ниже шаги показывают, как это сделать.
Создайте новый файл с именем TestInstrumentation.cs:
using System; using System.Reflection; using Android.App; using Android.Content; using Android.Runtime; using Xamarin.Android.NUnitLite; namespace App.Tests { [Instrumentation(Name="app.tests.TestInstrumentation")] public class TestInstrumentation : TestSuiteInstrumentation { public TestInstrumentation (IntPtr handle, JniHandleOwnership transfer) : base (handle, transfer) { } protected override void AddTests () { AddTest (Assembly.GetExecutingAssembly ()); } } }
В этом файле
Xamarin.Android.NUnitLite.TestSuiteInstrumentation
(из Xamarin.Android.NUnitLite.dll) содержит подклассы для созданияTestInstrumentation
.Реализуйте конструктор
TestInstrumentation
и методAddTests
. МетодAddTests
определяет, какие тестовые проекты выполняются.Измените файл
.csproj
, добавив TestInstrumentation.cs. Например:<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> ... <ItemGroup> <Compile Include="TestInstrumentation.cs" /> </ItemGroup> <Target Name="RunTests" DependsOnTargets="_ValidateAndroidPackageProperties"> <Exec Command=""$(_AndroidPlatformToolsDirectory)adb" $(AdbTarget) $(AdbOptions) shell am instrument -w $(_AndroidPackage)/app.tests.TestInstrumentation" /> </Target> ... </Project>
Разверните приложение в режиме отладки или выпуска, а затем выйдите из этого режима.
Используйте следующую команду для запуска модульных тестов. Замените
PACKAGE_NAME
именем пакета приложения (имя пакета можно найти в атрибуте приложения/manifest/@package
, расположенном в папке AndroidManifest.xml):adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
При необходимости файл
.csproj
можно изменить, добавив целевой объект MSBuildRunTests
. Это дает возможность вызывать модульные тесты с помощью команды, как в приведенном ниже примере.msbuild /t:RunTests Project.csproj
(Обратите внимание, что использование этого нового целевого объекта не является обязательным; вместо
msbuild
можно использовать предыдущую командуadb
.)
Дополнительные сведения об использовании команды adb shell am instrument
для выполнения модульных тестов см. в статье о Android Developer Запуск тестов с помощью ADB.
Примечание.
При использовании Xamarin.Android выпуска 5.0 имена пакетов по умолчанию для вызываемых программ-оболочек Android будут основываться на MD5SUM имени экспортируемого типа с указанием сборки. Это позволяет предоставить одно и то же полное имя из двух разных сборок и не получить ошибку упаковки Поэтому убедитесь, что вы используете свойство Name
атрибута Instrumentation
, чтобы создать имя класса для чтения или ACW.
Имя ACW должно использоваться в команде adb
, приведенной выше.
Для переименования или рефакторинга класса C# потребуется изменить команду RunTests
, чтобы она использовала правильное имя ACW.