André Carlucci

Skeptic .net development

TDD fácil com MVVM, NUnit e Moq no Windows Phone

Hoje vamos ver como testar suas aplicações no Windows Phone usando NUnit e o Moq.

1. Crie os projetos que vamos precisar:

Comece criando um novo projeto -> Windows Phone Application. De o nome de TddPhoneApp (ou qualquer outro).

Na sequência, crie um novo projeto do tipo Windows Phone Class Library e de o nome de PanoramaAppTdd.Tests.

2. Adicione as libraries necessárias

Vamos usar o NuGet para adicionar nossas bibliotecas. Abra “Package Manager Console”, selecione o projeto principal e digite:

Vamos utilizar o wp7tools para mapear o evento de click de um botão para um método no ViewModel e também para mostrar mensagens ao usuário de maneira testável.

Agora, selecione o projeto de testes como “Default project” e digite:

E depois:

Assim instalamos o NUnit (para o testes de unidade) e o Moq (para nosso mock). Perceba que no caso do Moq, estamos usando uma versão mais antiga, compatível com o Silverlight utilizado no Windows Phone.

3. Escrevendo seu primeiro teste

A regra de negócio que vamos testar é bem simples: quando o usuário aperta o botão “Olá”, uma mensagem dizendo “Hello World” deve ser apresentada.

Ao invés de utilizar a classe MessageBox diretamente, vamos usar uma interface. Além disso trazer testabilidade ao nosso aplicativo, podemos usar no início o MessageBox como implementação padrão e facilmente trocá-lo para algo mais interessante no futuro.

Primeiramente vamos criar nosso MainViewModel, classe que vai conter toda lógica de nossa MainPage. Esta classe vai utilizar nosso serviço de mensagens, então vamos colocá-lo no construtor. Neste caso, vamos utilizar o IDialogService, já pronto no projeto wp7tools, adicionado anteriormente:

Vamos agora ao nosso primeiro teste. Adicione a seguinte classe no projeto de testes:

Neste teste, estamos “mockando” o serviço de dialog e verificando com o Moq que ele realmente foi chamado.

Ao rodar este teste, ele deve falhar: esse é nosso “Red”. Para fazer o teste passar, basta adicionar essa linha no seu MainViewModel:

E pronto :)

4. Juntando tudo

Agora que nosso teste passa, vamos conectar o ato de apertar o botão com o método MostreHelloWorld de forma declarativa. O wp7tools tem uma maneira bem simples de fazer isso. Abra a MainPage.xaml e adicione dentro do Grid ContentPanel:

[xml]
<Button Content=”Olá”>
<Commands:Events.Mappings>
<Commands:Map Event=”Click” ToMethod=”MostreHelloWorld” />
</Commands:Events.Mappings>
</Button>
[/xml]

E vamos juntar a View com o ViewModel no code-behind para simplificar:

Rode o projeto e aperte o botão para ver a mensagem. E viva o TDD.