How do you mock a method which uses a private static inner class as a parameter?

883 views Asked by At

I have a class with a method that takes a single parameter. This parameter is a nested class inside the mocked class, but it is private (And static but I don't think that makes much of a difference to this). How do I go about mocking this method?

Example:

public class myClass {

    public anotherObject;

    public myClass(AnotherObject anotherObject) {
        this.anotherObject = anotherObject;
    }

    public void exec() {
        //Some instructions ...

        //This second method is inside another completely seperate class.
        anotherObject.secondMethod(new NestedClass());
    }

    private static class NestedClass {
        public NestedClass() {
             //Constructor
        }
        //Variables and methods, you get the picture
    }
}

In the above example secondMethod(...) is the method that I want to mock.

All attempts to find other examples of this problem just return results relating to mocking a single private nested class, or mocking static classes, which aren't completely relevant to this and don't seem to provide any work around that I can figure out.


EDIT: I'm looking for some sort of solution that looks like this:

@Test
public void testExec() {
    AnotherObject anotherObject = mock(AnotherObject.class);
    when(anotherObject.secondMethod(any(NestedClass.class))).thenReturn(0);

    MyClass testThisClass = new MyClass(anotherObject);
}

Notes: I'm not allowed to make modifications to the code I'm afraid, I am only allowed to create these tests to make sure the current implementation works later down the line when modification are made to it.

1

There are 1 answers

1
Shashank On

If I am understanding the requirement correctly, add one method say executeSecondMethod(). Call this method in your main method class.

public class myClass {
    public void exec() {
    //Some instructions ...

     secondMethod(new NestedClass());
    }

    public void secondMethod(NestedClass example) {
        //Some instructions that I want to just mock out...
    }

    private static class NestedClass {
        //Variables and methods, you get the picture
    }

    public static executeSecondMethod(){
        secondMethod(new NestedClass()); // pass the nested class object here
    }


}

public class mainClass{

    public static void main(){
        executeSecondMethod();
    }
}