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:
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 criarTestInstrumentation
.Implemente o
TestInstrumentation
construtor e oAddTests
método . OAddTests
método controla quais testes são realmente executados.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=""$(_AndroidPlatformToolsDirectory)adb" $(AdbTarget) $(AdbOptions) shell am instrument -w $(_AndroidPackage)/app.tests.TestInstrumentation" /> </Target> ... </Project>
Implante seu aplicativo no modo de depuração ou versão e, em seguida, interrompa-o.
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
Opcionalmente, você pode modificar o
.csproj
arquivo para adicionar o destino doRunTests
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 demsbuild
.)
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.