none
Testes Unitários MVC com Injeção de Dependências (Unity) RRS feed

  • Pergunta

  • Bom dia pessoal.

    É o seguinte, estou tentando criar uns testes unitários só um dos padrões de desenvolvimento que utilizo no projeto é a injeção de dependências.

    Beleza, mas qual o problema nisso ? Um dos propósitos do padrão não é facilitar os testes? Pois é.

    Estou precisando instanciar um Controller que no construtor tem um service que é instanciado pelo container do Unity e dentro desse service existem outros services que são instanciados também.

    Vou colocar as classes só para vocês conseguirem entender melhor.

    Classe de teste que quero realizar a instância do controller :

     [TestClass]
        public class XmlControllerTest
        {
    
            private IXmlController xmlController;
    
            [TestMethod]
            public void TestarXMLSComLotesIguais()
            {
                xmlController.Enviar(null);
            }
    
        }



    Controller :

     public class XmlController : Controller, IXmlController
        {
            private readonly IServiceMensagemTiss serviceMensagemTiss;
    
            public XmlController(IServiceMensagemTiss serviceMensagemTiss)
            {
                this.serviceMensagemTiss = serviceMensagemTiss;
            }
    }



    Service:

     public sealed class ServiceMensagemTiss : IServiceMensagemTiss
        {
    
            #region Variáveis
    
            private readonly IDALContext context;
            private readonly IServicePreCobranca servicePreCobranca;
            private readonly IServicePrestador servicePrestador;
            private readonly IServiceServico serviceServico;
            private readonly IServiceOutrasDespesas serviceOutrasDespesas;
            private readonly IServiceBeneficiario serviceBeneficiario;
            private readonly IServiceParticipante serviceParticipante;
            private readonly IServiceLote serviceLote;
            private readonly IServicePreCobrancaConsulta servicePreCobrancaConsulta;
    
            private IValidationDictionary validationDictionary;
    
    
            public IValidationDictionary ValidationDictionary
            {
                set { validationDictionary = value; }
            }
    
            public void InitModelStates()
            {
    
                servicePreCobranca.ValidationDictionary = validationDictionary;
                servicePreCobranca.InitModelStates();
    
                servicePrestador.ValidationDictionary = validationDictionary;
    
                serviceServico.ValidationDictionary = validationDictionary;
                serviceServico.InitModelStates();
    
                serviceOutrasDespesas.ValidationDictionary = validationDictionary;
    
                serviceBeneficiario.ValidationDictionary = validationDictionary;
    
                serviceParticipante.validationDictionary = validationDictionary;
    
                serviceLote.ValidationDictionary = validationDictionary;
                serviceLote.InitModelStates();
    
                servicePreCobrancaConsulta.ValidationDictionary = validationDictionary;
                servicePreCobrancaConsulta.InitModelStates();
    
            }
    
            #endregion
    
            public ServiceMensagemTiss(IDALContext context,
                IServicePreCobranca servicePreCobranca,
                IServicePrestador servicePrestador,
                IServiceServico serviceServico,
                IServiceOutrasDespesas serviceOutrasDespesas,
                IServiceBeneficiario serviceBeneficiario,
                IServiceParticipante serviceParticipante,
                IServiceLote serviceLote,
                IServicePreCobrancaConsulta servicePreCobrancaConsulta)
            {
                this.context = context;
                this.servicePreCobranca = servicePreCobranca;
                this.servicePrestador = servicePrestador;
                this.serviceServico = serviceServico;
                this.serviceOutrasDespesas = serviceOutrasDespesas;
                this.serviceBeneficiario = serviceBeneficiario;
                this.serviceParticipante = serviceParticipante;
                this.serviceLote = serviceLote;
                this.servicePreCobrancaConsulta = servicePreCobrancaConsulta;
            }



    O funcionamento em si tá tudo okay, o problema é somente este, instanciar o XmlController na classe XmlControllerTest.

    Alguem já passou por algo parecido ?
    segunda-feira, 23 de dezembro de 2013 15:19

Respostas

Todas as Respostas

  • Bom dia,

    Está fazendo uso do ninject correto?

    Utilizo ele dessa forma, conforme no link:

    unit Test with Ninject

    a idéia base é que você terá que mockar os objetos do construtor.

    • Sugerido como Resposta Raphael Heitor quinta-feira, 26 de dezembro de 2013 14:39
    • Marcado como Resposta KvnAllen quinta-feira, 26 de dezembro de 2013 22:29
    segunda-feira, 23 de dezembro de 2013 16:19
  • Valeu mesmo Raphael!

    Usando o Moq consegui realizar o teste, ficando assim :

    var mock = new Mock<IServiceMensagemTiss>(); xmlController = new XmlController(mock.Object);

    xmlController.Enviar(null);
    


    segunda-feira, 23 de dezembro de 2013 17:27
  • Bom dia Kevin

    Se te ajudou, por gentileza, marque como resposta.

    Abraços

    quinta-feira, 26 de dezembro de 2013 14:39