Compartilhar via


Como automatizar um projeto de Teste NUnit do Android?

Observação

Este guia explica como automatizar um projeto de teste NUnit do Android, não um projeto Xamarin.UITest. As informações do Xamarin.UITest podem ser encontradas aqui.

Quando você cria um projeto de Aplicativo de Teste de Unidade (Android) no Visual Studio (ou projeto de Teste de Unidade do Android no Visual Studio para Mac), esse projeto não executará automaticamente seus testes por padrão. Para executar testes NUnit em um dispositivo de destino, você pode criar uma subclasse Android.App.Instrumentation iniciada usando o seguinte comando:

adb shell am instrument

As etapas a seguir explicam esse processo:

  1. Crie um arquivo chamado 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 ());
            }
        }
    }
    

    Nesse arquivo, Xamarin.Android.NUnitLite.TestSuiteInstrumentation (de Xamarin.Android.NUnitLite.dll) é subclasse para criar TestInstrumentation.

  2. Implemente o TestInstrumentation construtor e o AddTests método . O AddTests método controla quais testes são realmente executados.

  3. Modifique o .csproj arquivo para adicionar TestInstrumentation.cs. Por exemplo:

    <?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. Implante seu aplicativo no modo de depuração ou versão e, em seguida, interrompa-o.

  5. Use o comando a seguir para executar os testes de unidade. Substitua PACKAGE_NAME pelo nome do pacote do aplicativo (o nome do pacote pode ser encontrado no atributo do /manifest/@package aplicativo localizado em AndroidManifest.xml):

    adb shell am instrument -w PACKAGE_NAME/app.tests.TestInstrumentation
    
  6. Opcionalmente, você pode modificar o .csproj arquivo para adicionar o destino do RunTests MSBuild. Isso possibilita invocar os testes de unidade com um comando como o seguinte:

    msbuild /t:RunTests Project.csproj
    

    (Observe que o uso desse novo destino não é necessário; o comando anterior adb pode ser usado em vez de msbuild.)

Para obter mais informações sobre como usar o adb shell am instrument comando para executar testes de unidade, consulte o tópico Android Developer Running tests with ADB (Executar testes com o ADB ) do Android Developer.

Observação

Com a versão Xamarin.Android 5.0 , os nomes de pacote padrão para Wrappers Callable do Android serão baseados no MD5SUM do nome qualificado por assembly do tipo que está sendo exportado. Isso permite que o mesmo nome totalmente qualificado seja fornecido de dois assemblies diferentes e não receba um erro de empacotamento. Portanto, certifique-se de usar a Name propriedade no Instrumentation atributo para gerar um ACW/nome de classe legível.

O nome ACW deve ser usado no adb comando acima. Renomear/refatorar a classe C# exigirá, portanto, a modificação do RunTests comando para usar o nome ACW correto.