Поделиться через


Как автоматизировать тестовый проект Android NUnit?

Примечание.

В этом руководстве объясняется, как автоматизировать тестовый проект NUnit на Android, а не проект Xamarin.UITest. Сведения о Xamarin.UITest см . здесь.

При создании проекта Приложение модульного тестирования (Android) в Visual Studio (или проект Модульный тест Android в Visual Studio для Mac), этот проект не будет автоматически выполнять тестовые проекты по умолчанию. Для выполнения тестовых проектов NUnit на целевом устройстве можно создать подкласс Android.App.Instrumentation, запущенный с помощью следующей команды:

adb shell am instrument

Приведенные ниже шаги показывают, как это сделать.

  1. Создайте новый файл с именем 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.

  2. Реализуйте конструктор TestInstrumentation и метод AddTests. Метод AddTests определяет, какие тестовые проекты выполняются.

  3. Измените файл .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="&quot;$(_AndroidPlatformToolsDirectory)adb&quot; $(AdbTarget) $(AdbOptions) shell am instrument -w $(_AndroidPackage)/app.tests.TestInstrumentation" />
        </Target>
        ...
    </Project>
    
  4. Разверните приложение в режиме отладки или выпуска, а затем выйдите из этого режима.

  5. Используйте следующую команду для запуска модульных тестов. Замените PACKAGE_NAME именем пакета приложения (имя пакета можно найти в атрибуте приложения /manifest/@package, расположенном в папке AndroidManifest.xml):

    adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
    
  6. При необходимости файл .csproj можно изменить, добавив целевой объект MSBuild RunTests. Это дает возможность вызывать модульные тесты с помощью команды, как в приведенном ниже примере.

    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.