Discussão:Eclipse CppUnit

De ccppbrasil.org

Acrescente aqui sua sugestão, crítica, observação ou qualquer outra coisa. Lembre-se sempre de acrescentar uma assinatura aos seus comentários.

--PedroLamarao 09:21, 7 Abril 2008 (EDT)

Uma das maneiras de testar um sistema em C é escrever uma série de programas que testam o sistema retornando sucesso pelo valor de retorno da função main. Dessa maneira, cada TestCase de uma TestSuite é um programa executável individual. O programa retorna sucesso ou fracasso através do seu valor de retorno, e toda a saída padrão é capturada como um <MessageEvent /> no histórico de execução. Desta maneira, toda a saída de um TestCase tem mais ou menos esta forma:

<EXECUTION>
  <typedEvent eventType="start" />
  <verdictEvent />
  <messageEvent />
  <typedEvent eventType="stop" />   
</EXECUTION>

--PedroLamarao 16:41, 10 Abril 2008 (EDT)

Subi para o repositório agora uma modificação ao Mock onde os componentes ExecutableObjectAdapter e ExecutionEnvironmentAdapter comunicam informação ao HyadesRunner que se reflete no histórico de execução como MessageEvents. É um exemplo parcial do caminho de dados por onde podemos comunicar informação em tempo de execução ao processo nativo que realiza o teste. Resta compreender como os variados elementos de workspace comunicam informações a esses Adapters quando um teste é executado.

Resta, também, compreender como o ExecutionDeploymentAdapter transporta artefatos de teste, e como os produtos de projetos C++ podem ser integrados a esse esquema.

--PedroLamarao 15:15, 13 Abril 2008 (EDT)

Estas notas estavam em outro lugar.

Um HyadesRunner cujo programa a testar seja hard-coded pode reaproveitar todos os Mock*Adapter.

Em geral, a execução de um teste de aplicativo nativo no ambiente remoto implica:

  • A distribuição dos artefatos em uma estrutura de diretórios apropriada.
Considere, por exemplo, a hierarquia /usr típica de um sistema Unix contemporâneo.
Se o projeto a testar for composto por binários e bibliotecas compartilhadas, é preciso distribuí-los entre /usr/bin e /usr/lib; se houverem dados de aplicativo necessários ao teste, /usr/share
Esta é a tarefa do ExecutionDeploymentAdapter.
  • A preparação do ambiente de teste.
Considere, no exemplo do Unix, que o caminho construído para a execução dos testes não estará na lista de caminhos de bibliotecas dinãmicas do ld.so.
É preciso preparar o ambiente de execução definindo a variável LD_LIBRARY_PATH.
Em geral, será preciso preparar o ambiente, no sentido getenv do termo, para a execução dos programas.
Esta é a tarefa do ExecutionEnvironmentAdapter.
  • A execução dos programas no sistema algo.
Como os programas são programas nativos resultados inusitados como SIGSEGV serão comuns e devem ser resolvidos apropriadamente.
O runner é um programa Java e os programas a testar serão processos filho de um processo Java.
É preciso cuidar bem da gerência desses processos filho.
Estas tarefas são realizadas pelo ExecutableObjectAdapter, que inicia o HyadesRunner, e pelo HyadesRunner, que executa o teste no target.

Referências:

--PedroLamarao 22:40, 15 Abril 2008 (EDT)

Este é o caminho para o deployment de arquivos no sistema remoto:

 public void deployTestAssets(INode node, TPFDeployment deployment,
   boolean isStandalone, StringBuffer bufError,
   IExecutionEnvironment exeEnvironment) {
   
   if (!(node instanceof NodeImpl)) {
     bufError.append("node is not an instance of NodeImpl");
     return;
   }
   
   NodeImpl nodeImpl = (NodeImpl) node;
   
   IFileManager fileManager = nodeImpl.getFileManager();
   
 }

Resta compreender a classe TPFDeployment, que parece representar o modelo EMF de um Deployment de Test Suite. IFileManager não oferece uma maneira de criar novos diretórios no sistema remoto, o que é uma droga. O objeto concreto criado pelo TPTP 4.4 também oferece a interface IFileManagerExtended, que também não oferece uma operação para criar novos diretórios.

Esta interface parece intacta no TPTP 4.5. Isso me parece quase totalmente inútil. Eu me lembro de ler, na documentação, sobre um "file browser" capaz de criar diretórios. Não sei onde ele está, que dirá que colaboração navega até ele.

--PedroLamarao 23:27, 25 Maio 2008 (EDT)

Ferramentas pessoais