Pergunta

Alguém tem sido capaz de sucesso métodos de teste de unidade que são, por necessidade, juntamente com a classe System.Windows.Forms.Form?

Eu recentemente estive trabalhando em um aplicativo C # winforms, tentando construí-lo com uma estrutura MVC. Isto é bastante difícil, dado que o quadro não é realmente construído com isso em mente.

No entanto, fica ainda mais difícil quando você joga o teste de unidade na mistura. Eu tenho certificando-se de que os meus controladores não são acoplados às classes visão concreta, para que eu possa usar um esboço / simulação para testes de unidade. Mas fazendo referência a classe de formulário em algum lugar é inevitável, e estes métodos precisam ser testados.

Eu tenho usado Moq porque tem algumas características interessantes tipo de segurança, e permite zombando tipos de concreto. Mas, infelizmente, ele não permite-me a "espera" chamadas para métodos ou propriedades em um tipo concreto que não são nem virtual nem abstrato. E uma vez que a classe de formulário não foi construído com subclassificação em mente, este é um grande problema. Eu preciso ser capaz de zombar a classe de formulário para evitar janelas reais que está sendo criado, por "esperando" ShowDialog, por exemplo.

Então, eu estou à esquerda incapaz de executar quaisquer testes de unidade que fazer muita interação com subclasses da Forma, que minhas opiniões são.

Há alguém lá fora que tem com sucesso unidade testada este tipo de código? Como você fez isso?

Isto é algo que outros frameworks de zombaria pode dar a volta? Será que os métodos baseados em cordas usadas por outros frameworks de zombaria estar sujeitos às mesmas restrições? Eu posso escrever minhas próprias classes de simulação explícita de longo mão, ou será que a falta de membros virtuais me impede de ser capaz de suprimir o comportamento da janela dessa forma também?

Ou há alguma maneira que eu não tenha pensado para estruturar as minhas aulas para que o código em formulários juntamente acaba em métodos e classes de complexidade trivial, de modo que eu possa fugir sem explicitamente unidade testá-las, sem a minha consciência bater-me para ele?

Foi útil?

Solução

O melhor método Já ouvi falar de / utilizado para testes de unidade com elementos GUI é o Humble diálogo padrão / método. Em essência, as formas são apenas a interface, e todo o trabalho real é feito em outras classes. Você unidade de teste as classes que fornecem a funcionalidade, e depois é só amarrar seus eventos GUI para os métodos apropriados nesses classes.

Outras dicas

Meu pensamento atual é que eu posso ter que usar composição em vez de herança com a classe de formulário, para desacoplar os controladores a partir dele.

Isto tem a desvantagem de que cada vez que eu precisar usar um membro da classe de formulário que eu não planejar, eu preciso adicionar explicitamente à minha interface de visualização.

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