Como testar o ArcObjects com o Mocking?

10

Sou um grande fã de testes de unidade, mas ainda uso um FGDB para obter recursos para executar testes de unidade ao usar a estrutura do ArcObjects.

Alguém com sucesso usando zombaria contra pensa como IFeature, IGeometry, IWorkspace etc. Se sim, eu adoraria ver alguns exemplos de como você está fazendo isso. Eu realmente não me importo com qual estrutura de simulação você usa, apenas ver como você está fazendo isso seria muito apreciado.

O problema que vejo é que você está tendo que dividir e dividir entre tantas interfaces no mesmo objeto, que a sobrecarga de criar um objeto de simulação representativo seria enorme.

BlinkyBill
fonte
Para qualquer pessoa que não conheça o Mocking (como eu), consulte este link. Coisas interessantes. stackoverflow.com/questions/300177/…
Simon

Respostas:

14

Em um projeto grande, conseguimos muito bem isolar o código do ArcObjects da nossa lógica de negócios. Geralmente, esse é o caminho a percorrer, eu diria, em vez de tentar zombar de tudo, mesmo que seja possível usar estruturas de zombaria para fazer parte do caminho.

Pergunte a si mesmo: por que você sente necessidade de zombar? Normalmente, isso ocorre devido a uma abstração ausente. Pense em pequenas responsabilidades e minimize a superfície do enorme e feio monstro ArcObject. Evite arrastar os tipos de ArcObject apenas porque algum aspecto deles é necessário em algum lugar.

Eu posso dar um exemplo concreto do nosso projeto. Uma parte do código parecia depender do IMxDocument. O único motivo foi que a visão ativa precisava ser atualizada. Então criamos uma interface IViewRefresher e só trabalhamos nisso; fácil de zombar e testar. Além disso, isso torna a intenção do código muito mais clara e elimina a tentação de alguém começar a fazer coisas engraçadas com o IMxDocument que elas não deveriam fazer porque tudo o que queríamos fazer aqui era atualizar. O mesmo exercício pode ser feito com grande parte do código do ArcObjects.

Além disso, empacotamos todo o acesso a classes de recursos em invólucros de tipo seguro, novamente fornecendo código simulável que protege o código comercial do ArcObjects.

Discutimos nem mesmo o uso dos tipos de geometria do ArcObjects, mas atualmente permitimos que essas interfaces sejam usadas diretamente em nosso código. (No entanto, apenas o conhecimento da interface é permitido e todas as instanciações de geometrias usam nossa própria fábrica de geometria.)

Em resumo, não desencorajo a zombaria, mas incentivaria a zombaria em um nível de abstração diferente do ArcObjects.

Cumbayah
fonte
ótima resposta Cumbayah. Eu também tenho muitas dificuldades ao testar o código AO. O exemplo que você deu foi ótimo (IViewRefresher) e eu posso aplicar isso ao meu trabalho aqui. Você pode dar mais exemplos?
George Silva
Obrigado Cumbayah. Atualmente, é o que faço em projetos de médio e grande porte, criando um assembly separado para abstrair toda a implementação do AO. É essa abstração que eu gostaria de testar sem recorrer aos dados armazenados, sejam espaços de trabalho XML ou bancos de dados geográficos de um tipo ou de outro. De tempos em tempos, com dados diferentes, surgem novos problemas, que precisam ter testes criados, o que exige dados de teste adicionais. Com o tempo, tenho tantos dados de teste para todos os casos de teste que os projetos se tornam enormes para gerenciar e movimentar, permitindo o download pelo meu servidor de compilação automatizado.
precisa saber é o seguinte
Cumbayah, isso parece incrível. Eu adoraria alguns exemplos. Você já pensou em apresentar algo sobre esse assunto em uma das conferências da ESRI? Eu acho que a comunidade ESRI / GIS está morrendo de vontade por esse tipo de coisa. Gostaria de ver algum movimento de código aberto sendo iniciado para testar / zombar do ArcObjects.
Keith G
Este é um tópico antigo que eu entendo, mas alguma chance de obtermos uma amostra da sua "própria fábrica de geometria"? Estou tentando fazer com que minha organização se mova na direção dos testes de unidade, mas estou ficando desconectada do macaco ArcObjects.
Luke
4

O Teste de Unidade para Esri Developers, de Dave Bouwman e Brian Noyle, é um bom ponto de partida - principalmente porque eles lançaram algum código para analisar.

bwreilly
fonte
Obrigado pelo ponteiro bwreilly. No entanto, o que Dave faz é simplesmente usar representações XML de recursos. Portanto, enquanto está ajudando, ele ainda depende do armazenamento de dados para testes, e é disso que estou tentando fugir.
BlinkyBill