Skip to content

Remove switch and mockClassCounter in mockConstruction in simple mockConstruction cases #1878

@alisevych

Description

@alisevych

Description

Unneeded sophistication of mockConstruction:
switch statement in mockConstruction definition and mockClassCounter can be avoided here.

To Reproduce

  1. Install one of the latest plugin builds from main into IntelliJ Idea 2022.2.*
  2. Open/clone "utbot" project
  3. Use plugin to generate tests for org.utbot.examples.mock.provider.impl.ProviderImpl#provideObject
  4. Open the generated test

Expected behavior

switch statement in mockConstruction definition and mockClassCounter can be avoided here.
The constructed Object will be the same for all instantiations.

Actual behavior

There is unnecessary switch statement and mockClassCounter used in `mockConstruction.
It is confusing for a user.

Visual proofs (screenshots, logs, images)

    ///region SYMBOLIC EXECUTION: SUCCESSFUL EXECUTIONS for method provideObject()

    /**
     * @utbot.classUnderTest {@link ProviderImpl}
     * @utbot.methodUnderTest {@link ProviderImpl#provideObject()}
     * @utbot.returnsFrom {@code return new ExampleClass(0);}
     */
    @Test
    @DisplayName("provideObject: -> return new ExampleClass(0)")
    public void testProvideObject_Return() {
        org.mockito.MockedConstruction mockedConstruction = null;
        try {
            java.util.concurrent.atomic.AtomicInteger mockClassCounter = new java.util.concurrent.atomic.AtomicInteger();
            mockedConstruction = mockConstruction(ExampleClass.class, (ExampleClass ExampleClassMock, org.mockito.MockedConstruction.Context context) -> {
                switch (mockClassCounter.get()) {
                    case 0:
                        break;
                }
                mockClassCounter.getAndIncrement();
            });
            ProviderImpl providerImpl = new ProviderImpl();

            ExampleClass actual = providerImpl.provideObject();

            ExampleClass expectedMock = mock(ExampleClass.class);
            expectedMock.field = 0;
            // org.utbot.examples.mock.service.impl.ExampleClass has overridden equals method
            assertEquals(expectedMock, actual);
        } finally {
            mockedConstruction.close();
        }
    }
    ///endregion

Environment

Windows 10 Pro
IntelliJ IDEA 2022.2.4
org.mockito:mockito-core:4.2.0

Metadata

Metadata

Assignees

Labels

comp-symbolic-engineIssue is related to the symbolic execution enginectg-bugIssue is a buglang-javaIssue is related to Java supportspec-uxIssue is influencing user experience

Type

No type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions