Skip to content

Cover summary builders with unit tests #543

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Closed
onewhl opened this issue Jul 18, 2022 · 3 comments · Fixed by #734
Closed

Cover summary builders with unit tests #543

onewhl opened this issue Jul 18, 2022 · 3 comments · Fixed by #734
Assignees
Labels
comp-summaries Something related to the method names, code comments and display names generation

Comments

@onewhl
Copy link
Member

onewhl commented Jul 18, 2022

Description

We need to cover SimpleCommentBuilder.kt, SimpleNameBuilder.kt, and SimpleClusterBuilder.kt with unit tests to capture the current behavior and make it easier to catch issues in the future.

I will try to do it using UTBot and on my own as well.

@onewhl onewhl added the comp-summaries Something related to the method names, code comments and display names generation label Jul 18, 2022
@onewhl onewhl self-assigned this Jul 18, 2022
@korifey korifey moved this to Todo in UTBot Java Jul 18, 2022
@onewhl
Copy link
Member Author

onewhl commented Jul 19, 2022

UTBot couldn't generate any tests for SimpleCommentBuilder.kt.
Environment:

JDK version: Amazon Coretto 1.8

UTBot version: 2022.7-beta

IDE version: IntelliJ Community 2022.1.3

Build #IC-221.5921.22, built on June 21, 2022
Runtime version: 11.0.15+10-b2043.56 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

It shows same error report for several methods:

    ///region Errors report for genWarnNotification
    
    public void testGenWarnNotification_errors()
     {
        // Couldn't generate some tests. List of errors:
        // 
        // 1 occurrences of:
        /* class org.utbot.framework.plugin.api.UtCompositeModel cannot be cast to class org.utbot.framework.plugin.api.UtModel (org.utbot.framework.plugin.api.UtCompositeModel is
        in unnamed module of loader java.net.URLClassLoader @6abba1ec; org.utbot.framework.plugin.api.UtModel is in
        unnamed module of loader com.intellij.ide.plugins.cl.PluginClassLoader @4e9c8dd5) */
        
    }

@sergeypospelov could you please help with it? should I create an issue for it?

@onewhl
Copy link
Member Author

onewhl commented Jul 19, 2022

UTBot also failed to generate tests for SimpleNameBuilder.kt
Error report:

    ///region Errors report for conditionStep

    public void testConditionStep_errors() {
        // Couldn't generate some tests. List of errors:
        // 
        // 6 occurrences of:
        // Default concrete execution failed

        // 4 occurrences of:
        /* Error in the child process |> org.mockito.exceptions.base.MockitoException: 	Mockito cannot mock
        this class: class org.utbot.framework.plugin.api.Step.	Can not mock final classes with the
        following settings :	 - explicit serialization (e.g. withSettings().serializable())	 - extra
        interfaces (e.g. withSettings().extraInterfaces(...))		You are seeing this disclaimer because Mockito is
        configured to create inlined mocks.	You can learn about inline mocks
        and their limitations under item #39 of the Mockito class
        javadoc.		Underlying exception : org.mockito.exceptions.base.MockitoException: Could not modify all classes [class
        org.utbot.framework.plugin.api.Step]
        		at org.utbot.framework.concrete.MockValueConstructor.generateMockitoMock(MockValueConstructor.kt:220)
        		at org.utbot.framework.concrete.MockValueConstructor.constructObject(MockValueConstructor.kt:166)
        		at org.utbot.framework.concrete.MockValueConstructor.construct(MockValueConstructor.kt:127)
        		at org.utbot.framework.concrete.MockValueConstructor.constructMethodParameters(MockValueConstructor.kt:104)
        		at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:144)
        		at org.utbot.framework.concrete.UtExecutionInstrumentation.invoke(UtExecutionInstrumentation.kt:107)
        		at org.utbot.instrumentation.process.ChildProcessKt.loop(ChildProcess.kt:133)
        		at org.utbot.instrumentation.process.ChildProcessKt.main(ChildProcess.kt:77)
        		at org.utbot.instrumentation.process.ChildProcessKt.main(ChildProcess.kt)
        	Caused by: org.mockito.exceptions.base.MockitoException: Could not modify all classes [class org.utbot.framework.plugin.api.Step]
        		at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:158)
        		at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:372)
        		at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:180)
        		at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:383)
        		... 9 more
        	Caused by: java.lang.IllegalStateException: 	Byte Buddy could not instrument all classes
        within the mock's type hierarchy		This problem should never occur for
        javac-compiled classes. This problem has been observed for classes that
        are:	 - Compiled by older versions of scalac	 - Classes
        that are part of the Android distribution
        		at org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.triggerRetransformation(InlineBytecodeGenerator.java:280)
        		at org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.mockClass(InlineBytecodeGenerator.java:213)
        		at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.lambda$mockClass$0(TypeCachingBytecodeGenerator.java:47)
        		at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:158)
        		at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:372)
        		at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:180)
        		at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:383)
        		at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.mockClass(TypeCachingBytecodeGenerator.java:40)
        		at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.createMockType(InlineDelegateByteBuddyMockMaker.java:389)
        		at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.doCreateMock(InlineDelegateByteBuddyMockMaker.java:349)
        		at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.createMock(InlineDelegateByteBuddyMockMaker.java:328)
        		at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.createMock(InlineByteBuddyMockMaker.java:56)
        		at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:53)
        		at org.mockito.internal.MockitoCore.mock(MockitoCore.java:96)
        		at org.mockito.Mockito.mock(Mockito.java:1964)
        		at org.mockito.Mockito.mock(Mockito.java:1937)
        		... 9 more
        	Caused by: java.lang.NoClassDefFoundError: Lsoot/jimple/Stmt;
        		at java.lang.Class.getDeclaredFields0(Native Method)
        		at java.lang.Class.privateGetDeclaredFields(Class.java:2611)
        		at java.lang.Class.getDeclaredFields(Class.java:1944)
        		at net.bytebuddy.description.type.TypeDescription$ForLoadedType.getDeclaredFields(TypeDescription.java:8797)
        		at net.bytebuddy.dynamic.scaffold.InstrumentedType$Factory$Default$1.represent(InstrumentedType.java:437)
        		at net.bytebuddy.ByteBuddy.redefine(ByteBuddy.java:867)
        		at net.bytebuddy.ByteBuddy.redefine(ByteBuddy.java:842)
        		at org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.transform(InlineBytecodeGenerator.java:382)
        		at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
        		at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
        		at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
        		at sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:144)
        		at org.mockito.internal.creation.bytebuddy.InlineBytecodeGenerator.triggerRetransformation(InlineBytecodeGenerator.java:276)
        		... 24 more
        	Caused by: java.lang.ClassNotFoundException: soot.jimple.Stmt
        		at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        		at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        		at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        		at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        		... 37 more
        	 */

    }

@sergeypospelov
Copy link
Member

sergeypospelov commented Jul 19, 2022

Unfortunately, it's impossible to use UtBot on our project with UtSettings.useConcreteExecution set to true. It's our internal problem and is quite complex. Looks like setting this option to false might help. It can be found in UtSettings.kt.

amandelpie pushed a commit that referenced this issue Aug 18, 2022
* Configured unit tests with mockito

* Add unit tests for SimpleNameBuilderTest #543

* Add unit tests for SimpleClusterCommentBuilderTest.kt and SimpleCommentBuilderTest.kt #543

* change mockito version, fix broken test, add tests for buildDocStmts

* add tests for invokeDescription method
Repository owner moved this from Todo to Done in UTBot Java Aug 18, 2022
denis-fokin pushed a commit that referenced this issue Aug 18, 2022
* Configured unit tests with mockito

* Add unit tests for SimpleNameBuilderTest #543

* Add unit tests for SimpleClusterCommentBuilderTest.kt and SimpleCommentBuilderTest.kt #543

* change mockito version, fix broken test, add tests for buildDocStmts

* add tests for invokeDescription method
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
comp-summaries Something related to the method names, code comments and display names generation
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

2 participants