Testes Integrados Automatizados com
                      ArcObjects
Testes Integrados
Motivação
“You should be able to run the tests in the production environment, in the QA
environment, and on your laptop while riding home on the train without a
network.”
James Grenning
Estruturando
A Solução do Problema
Geodatabase.cs
void OpenGeodatabase();
void CloseGeodatabase(bool saveEdits);
int InserirRegistroGis(List<ListItem> itens, string nomeTabela);
int InserirFeatureGis(List<ListItem> itens, string nomeClasse, IGeometry geometria);
int CriarRegistroGis(List<ListItem> itens, string nomeTabela);
int AtualizarRegistroGis(List<ListItem> itens, string nomeTabela);
bool AtualizarRegistroGis(List<ListItem> itens, IRow row);
bool WorkspaceEmEdicao();
bool ExisteRegistro(string nomeTabela, string campoChave, int valor);
ITable GetTable(string tableName);
IFeatureClass GetFeatureClass(string className);
List<ListItem> GetRow(int oid, string tableName);
[ClassInitialize()]
                                   Test.cs                                  Test.cs
    public static void MyClassInitialize(TestContext testContext)
    {
      try
      {
         geodatabase = new Geodatabase(null, Geodatabase.InitializeLicense.Intialize);
      }
      catch (Exception ex)
      {
         Assert.Inconclusive("Can't initialize license" + "Trace:" + ex.Message);
      }
    }
[TestInitialize()]
    public void MyTestInitialize()
    {
      geodatabase.AbrirGeodatabase();
    }

[TestCleanup()]
    public void MyTestCleanup()
    {
      geodatabase.FecharGeodatabase(true);
    }
A questão
das Licenças Esri
Licenças
ArcGIS 10

public static void InitializeLicenseEditor()
    {
       RuntimeManager.BindLicense(ProductCode.Desktop, LicenseLevel.Standard);
       RuntimeManager.Bind(ProductCode.Desktop);
    }

  ArcGIS 9.x

  public static void InitializeLicenseEditor()
      {
         AoInitialize aoInitializer = new AoInitializeClass();
         aoInitializer.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcEditor);
      }
Licenças
ArcFM 10
public mmLicenseStatus InicializaLicencaArcFm(mmLicensedProductCode minerLicense)
   {
      this.licenseStatus = CheckOutLicensesArcFM(minerLicense);
      return licenseStatus;
   }

   public void FinalizaLicencaArcFM()
   {
     m_MMAppInitialize.Shutdown();
   }

private mmLicenseStatus CheckOutLicensesArcFM(mmLicensedProductCode productCode)
    {
      m_MMAppInitialize = new MMAppInitializeClass();
      mmLicenseStatus licenseStatus = default(mmLicenseStatus);
      licenseStatus = m_MMAppInitialize.IsProductCodeAvailable(productCode);

       if (licenseStatus == mmLicenseStatus.mmLicenseAvailable)
       {
          licenseStatus = m_MMAppInitialize.Initialize(productCode);
       }
       return licenseStatus;
   }
Benefícios
  Esperados
Melhor
  entendimento                              Podem
   do fluxo de          Real               ser realizados no
    dados no          cobertura de      cliente identificando
  Geodatabase            Código             problemas não
                                             encontrados




                       Testes
                   Integrados podem
Identificação       contar mais sobre          Ter
  mais rápida de   uma estória do que    Os desenvolvedores
                          uma            muito mais seguros
 problemas novos                             e confiantes
                     documentação
                       abrangente
Vendo
na prática
Fazer um ^ produto
O que vem
depois
Nossa missão é: tornar o feedback
                                    Total
erocha@   img.com.br

Testes integrados automatizados

  • 1.
  • 2.
  • 3.
  • 5.
    “You should beable to run the tests in the production environment, in the QA environment, and on your laptop while riding home on the train without a network.” James Grenning
  • 6.
  • 7.
    Geodatabase.cs void OpenGeodatabase(); void CloseGeodatabase(boolsaveEdits); int InserirRegistroGis(List<ListItem> itens, string nomeTabela); int InserirFeatureGis(List<ListItem> itens, string nomeClasse, IGeometry geometria); int CriarRegistroGis(List<ListItem> itens, string nomeTabela); int AtualizarRegistroGis(List<ListItem> itens, string nomeTabela); bool AtualizarRegistroGis(List<ListItem> itens, IRow row); bool WorkspaceEmEdicao(); bool ExisteRegistro(string nomeTabela, string campoChave, int valor); ITable GetTable(string tableName); IFeatureClass GetFeatureClass(string className); List<ListItem> GetRow(int oid, string tableName);
  • 8.
    [ClassInitialize()] Test.cs Test.cs public static void MyClassInitialize(TestContext testContext) { try { geodatabase = new Geodatabase(null, Geodatabase.InitializeLicense.Intialize); } catch (Exception ex) { Assert.Inconclusive("Can't initialize license" + "Trace:" + ex.Message); } } [TestInitialize()] public void MyTestInitialize() { geodatabase.AbrirGeodatabase(); } [TestCleanup()] public void MyTestCleanup() { geodatabase.FecharGeodatabase(true); }
  • 9.
  • 10.
    Licenças ArcGIS 10 public staticvoid InitializeLicenseEditor() { RuntimeManager.BindLicense(ProductCode.Desktop, LicenseLevel.Standard); RuntimeManager.Bind(ProductCode.Desktop); } ArcGIS 9.x public static void InitializeLicenseEditor() { AoInitialize aoInitializer = new AoInitializeClass(); aoInitializer.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcEditor); }
  • 11.
    Licenças ArcFM 10 public mmLicenseStatusInicializaLicencaArcFm(mmLicensedProductCode minerLicense) { this.licenseStatus = CheckOutLicensesArcFM(minerLicense); return licenseStatus; } public void FinalizaLicencaArcFM() { m_MMAppInitialize.Shutdown(); } private mmLicenseStatus CheckOutLicensesArcFM(mmLicensedProductCode productCode) { m_MMAppInitialize = new MMAppInitializeClass(); mmLicenseStatus licenseStatus = default(mmLicenseStatus); licenseStatus = m_MMAppInitialize.IsProductCodeAvailable(productCode); if (licenseStatus == mmLicenseStatus.mmLicenseAvailable) { licenseStatus = m_MMAppInitialize.Initialize(productCode); } return licenseStatus; }
  • 12.
  • 13.
    Melhor entendimento Podem do fluxo de Real ser realizados no dados no cobertura de cliente identificando Geodatabase Código problemas não encontrados Testes Integrados podem Identificação contar mais sobre Ter mais rápida de uma estória do que Os desenvolvedores uma muito mais seguros problemas novos e confiantes documentação abrangente
  • 14.
  • 15.
    Fazer um ^produto
  • 16.
  • 17.
    Nossa missão é:tornar o feedback Total
  • 18.
    erocha@ img.com.br