jmock-developers / jmock-library

An expressive Mock Object library for Test Driven Development
http://www.jmock.org
BSD 3-Clause "New" or "Revised" License
133 stars 70 forks source link

Automatically detect class which is being mocked #282

Open rohanlopes20 opened 7 months ago

rohanlopes20 commented 7 months ago

Currently mock object is created as follows -

Mockery mockery = new Mockery();
DummyInterface dummyInterface = mockery.mock(DummyInterface .class);

This can be created like below as well. We don't have to explicitly provide class name.

Mockery mockery = new Mockery();
DummyInterface dummyInterface = mockery.mock();

This is in reference to pull request https://github.com/mockito/mockito/pull/2779#issuecomment-1312693742

Below code can be added -

   private static <T> Class<T> getClassOf(T[] array) {
        return (Class<T>) array.getClass().getComponentType();
    }

    /**
     * Creates a mock object of type <var>typeToMock</var> and generates a name for it.
     * @param <T> is the class of the mock
     * @param  reified don't pass any values to it. It's a trick to detect the class/interface you want to mock.
     * @return the mock of typeToMock
     */
    public <T> T mock(T... reified) {
        if (reified.length > 0) {
            throw new IllegalArgumentException(
                    "Please don't pass any values here. Java will detect class automagically.");
        }
        return mock(getClassOf(reified));
    }
olibye commented 7 months ago

Nice, feel free to make a PR

rohanlopes20 commented 7 months ago

Not able to make PR/push changes to branch as not part of member group. Branch is already created on local.

Nice, feel free to make a PR