#java #maven #unit-testing #mockito #powermockito
Вопрос:
У меня есть новый проект и я тестирую его функции. Для этого я создал TestClass
систему, которая расширяется PowerMockTestCase
. В этом классе у меня есть несколько функций, которые инициализируют переменные (obj) и подготавливают входные данные для теста. Одна из тестовых функций, которые у меня есть, выглядит примерно так:
@Test
public void testWList() throws Exception {
assertEquals(pageList.size(), 4);
assertNull(pageList.get(0).getC("176").getN("263").getL().getW());
Class1 c1 = Util.merge(pageList, obj1, obj2);
assertEquals(c1.getC().size(), 6);
assertEquals(pageList.size(), 3);
assertNotNull(c1.getC("176"));
assertNotNull(c1.getC("176").getN("263"));
----> assertNotNull(c1.getC("176").getN("263").getW());
.....
.....
}
Class1-это класс, который включает в себя примитивы, а также список другого класса (скажем, Class2), который сам по себе имеет аналогичную структуру. например, getC() получает список объекта класса, который сам имеет функцию getN (), которая снова возвращает объект другого класса (например, Class3). Ниже приведен getC, getN имеет точно такую же структуру.
@JsonIgnore
public Class2 getC(String Id) {
Class2 retVal = null;
if (Utils.isNotEmpty(Id)) {
for (Class2 c2 : List<Class2>) {
String currId = c2.getZId();
if (Utils.isNotEmpty(currId)
amp;amp; currId.equals(Id)) {
retVal = c2;
break;
}
}
}
return retVal;
}
Когда я запускаю testWList
функцию по отдельности, она проходит все тестовые случаи, но когда я пытаюсь построить проект с помощью ( mvn clean install
), в строке, обозначенной стрелкой в приведенном выше коде, происходит сбой assertNotNull(c1.getC("176").getN("263").getW());
. Ниже приведена ошибка, которую я вижу во время выполнения mvn clean install
:
Running TestSuite
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message
transform method call failed at JPLISAgent.c line: 844
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled.
Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize=
CodeCache: size=245760Kb used=243187Kb max_used=243262Kb free=2572Kb
bounds [0x000000010451d000, 0x000000011351d000, 0x000000011351d000]
total_blobs=66659 nmethods=65908 adapters=612
compilation: disabled (not enough contiguous free space left)
Tests run: 2899, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1,084.705 sec <<< FAILURE! - in TestSuite
testWList(com.abtest.BBBB.TestClass) Time elapsed: 0.031 sec <<< FAILURE!
java.lang.AssertionError: expected object to not be null at com.abtest.BBBB.TestClass.testWList(TestClass.java:219)
Results :
Failed tests:
TestClass.testWList:219 expected object to not be null
Tests run: 2899, Failures: 1, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19:54 min
[INFO] Finished at: 2021-08-05T22:11:09-07:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project p1: There are test failures.
[ERROR]
[ERROR] Please refer to /Users/aa/p/f/p1/target/surefire-reports for the individual test results.
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute
goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project p1: There are test failures.
Please refer to /Users/aa/p/f/p1/target/surefire-reports for the individual test results.
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.plugin.MojoFailureException: There are test failures.
Я не понимаю причины этого, почему, когда я запускаю тест, он проходит, но когда я выполняю чистую установку mvn, он терпит неудачу. Мне нужно построить его, не пропуская тесты.
Комментарии:
1. Во-первых, к какой структуре данных осуществляется
c1.getC("176")
доступ? Карта? Кроме того, когда я читаю powermock, на мой взгляд, уже существует основная проблема.. Какую версию Java, версию Maven вы используете? Плагин surefire, который вы используете, действительно старый… ?2. это список объекта класса. Который сам класс имеет различные типы полей, включая String, Long, List<another_class>, Map и т. Д. Главная страница Maven: /Пользователи/aa/apache-maven-3.6.1 Версия Java: 1.8.0_201, поставщик: Корпорация Oracle, среда выполнения: /Библиотека/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Содержимое/Главная страница/jre
3. Где/как инициализируются поля
pageList
,obj1
,obj2
? Похоже, у вас есть несколько тестов. Очевидно , что при индивидуальном запуске они имеют доступ к чистым данным и базовым полям, т. Е.obj1
иobj2
т. Д. Когда вы запустите mvn clean install, он будет запускать тесты один за другим и будет означать, что obj1, obj2 могут находиться в «грязном» состоянии. Вам нужно попытаться изолировать модульные тесты, чтобы использовать переменные уровня метода или инициализировать/очистить их с помощью методов настройки/демонтажа.4. Доступ через
c1.getC("..")
означает доступ к полю ? Какая структура данных будет предоставлена, которую вы используете?5. @Setu, все входные
pageList
obj1
данныеobj2
, инициализируются внутри одного и того же класса , но в разных функциях@BeforeClass public void init() throws Exception
… @khmarbaise я добавил функцию getC выше.