O que é uma boa maneira de burlar uma API HTTPS remota para testar a unidade do meu aplicativo QML?

3

Eu estou mexendo com um aplicativo QML que interage com uma API REST remota por HTTPS. A parte "cliente" do aplicativo é bem empacotada em um componente e eu gostaria de testar a unidade, mas eu não quero ter que confiar no serviço remoto estar disponível sempre que eu executar testes, nem eu quero comete transações reais. Em vez disso, quero zombar do serviço remoto.

O que é uma boa maneira de fazer isso? Estou desenvolvendo no Ubuntu Trusty, usando o Ubuntu SDK 1.119.

    
por James Tait 28.03.2014 / 13:57

1 resposta

2

Se toda a lógica para conversar com a API remota e analisar os resultados estiver em C ++ como um plug-in de componente, você poderá usar o google-mock no Ubuntu, para criar testes unitários que simulam resultados e dados esperados. No entanto, se a API no servidor for alterada, seu código ainda poderá falhar, mesmo que os testes passem, já que você está testando apenas alguns resultados esperados conhecidos.

Outra opção é introduzir uma variável de ambiente em seu código, para que você possa apontar o URL base para um local diferente, como localhost: 12345 , e implementar um servidor HTTP simulado em Python ou outro idioma, que é executado em uma porta alta aleatória, na qual você pode apontar os testes. Isso torna a execução dos testes um pouco mais complicada, já que você precisa obter a porta aleatória do script do servidor e transmiti-la aos testes de alguma forma. Você pode executar esse teste em HTTP simples ou criar um certificado de CA e um certificado de servidor, incluídos no conjunto de testes, e adicionar uma maneira de garantir que a biblioteca de rede carregue a autoridade de certificação na cadeia de certificados para validar a conexão HTTPS local. No entanto, tudo isto é muito complicado e não lhe dá mais resultados úteis do que testes unitários mais simples com dados falsos.

Além disso, você só pode falar com um servidor real, com um certificado válido real. O ideal é que o serviço remoto forneça um servidor de teste / teste para executar esses testes e você pode introduzir uma variável de ambiente ou semelhante em seu código, para apontá-lo no servidor de teste / teste, em vez do servidor ativo.

    
por dobey 28.03.2014 / 14:53