Pergunta

Tenho um aplicativo que envia mensagens para um serviço web externo.Eu construo e implanto este aplicativo usando MSBuild e Cruisecontrol.NET.À medida que a CCNET constrói e implanta o aplicativo, ela também executa um conjunto de testes usando NUunidade.Agora gostaria de testar também a comunicação do serviço web.

Minha ideia é que, como parte do processo de construção, um serviço da web seja gerado (com base no WSDL de serviços da web externos) e implantado no servidor da web local dos servidores de construção.Tudo o que o serviço web deve fazer é receber a mensagem e colocá-la no sistema de arquivos para que eu possa verificá-la usando o NUnit comum, por exemplo.Isso também tornaria o desenvolvimento mais fácil, pois os novos desenvolvedores teriam apenas que executar o script de construção e estar instalado e funcionando (sem precisar perder tempo para configurar uma conexão com o serviço de terceiros).

Há alguns utilitários existentes por aí que zomba facilmente de um serviço web baseado em WSDL?Qualquer um fez algo semelhante usando o MSBuild?

Existem outras maneiras de testar esse cenário?

Foi útil?

Solução

Eu comecei a pesquisar http://www.soapui.org/ e parece que funcionará bem para testar serviços da web.

Além disso, talvez considere adicionar uma camada de abstração em seu serviço da web, cada chamada de serviço chamaria diretamente um método testável (fora do escopo da web)?Acabei de fazer isso com um projeto maior no qual estou trabalhando e sua testabilidade está funcionando bem.

Outras dicas

Em geral, uma boa maneira de testar coisas assim é usar objetos simulados.

No trabalho, usamos o produto TipoMock para testar coisas como comunicação de serviços da Web e outras dependências externas.Custa dinheiro, por isso pode não ser adequado às suas necessidades, mas acho que é um produto fantástico.Posso dizer por experiência própria que ele se integra muito bem com NUnit e CCNet.

Ele tem uma sintaxe realmente simples, onde você basicamente diz "Quando esse método/propriedade é chamado, quero que você retorne esse valor". É ótimo para testar coisas como falhas de rede, arquivos não presentes e, claro, serviços da Web.

Dê uma olhada NMock2.É um produto de simulação de código aberto e permite criar implementações "virtuais" para interfaces que suportam interação rica e profunda.

Por exemplo, se sua interface WS for chamada IService e tem um Data GetData() método, você pode criar uma simulação que requer que o método seja chamado uma vez e retorne um novo Data objeto:

var testService = mockery.NewMock<IService>();
Expect
    .Once
    .On(testService)
    .Method("GetService")
    .WithNoArguments()
    .Will(
        Return.Value(new Data());

No final do teste, ligue mockery.VerifyAllExpectationsHaveBeenMet() para garantir que GetData método foi realmente chamado.

P.S.:não confunda o projeto "NMock2" com o "NMock RC2", que também é chamado de "nmock2" no sourceforge.O projeto NMock2 parece ter substituído o NMock.

Isso também pode ser algo - Pássaro mimo.Pareça útil.

No meu local de trabalho estamos usando Tipo simulado e nUnidade para nossos testes de unidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top