mercredi 1 août 2018

C# How do I invoke a private overloaded method using System.Reflection when number of arguments are equal

I have a class called TicketManager. This class has two private methods private void Validate(Ticket ticket) and an overload private void Validate(TicketResponse ticketResponse).

Whenever I try to invoke Validate(TicketResponse) using reflection I get a NullReferenceException.

When I use the BindingFlags without specifying the Type[] I get an Ambiguous Match Exception.

The following code is my unit test using MSTest.

//testing private validation method using reflection
    [TestMethod]
    [ExpectedException(typeof(TargetInvocationException))]
    public void Validate_TicketResponseIsInvalid_ReturnsValidationException()
    {
        //Arrange
        TicketManager ticketManager = new TicketManager(ticketRepository);
        Ticket t = new Ticket { AccountId = 1, Text = "How do I test a private method in C#?", TicketNumber = 5 };
        TicketResponse tr = new TicketResponse { Ticket = t, IsClientResponse = false, Date = DateTime.Now };

        //reflection
        MethodInfo methodInfo = typeof(TicketManager).GetMethod("Validate", new Type[] { typeof(TicketResponse) });
        object[] parameters = {tr};
        //Act
        methodInfo.Invoke(ticketManager, parameters); //throws NullReferenceException

        //Assert
        //assertion happens using attribute added to method
    }





Aucun commentaire:

Enregistrer un commentaire