Я обновил версию MRUnit до версии 1.1.0 в своем проекте, чтобы использовать RedDriver для тестирования нескольких выходов. После внесения изменений в мой тест (чтобы заставить его работать с обновлением), я получаю эту ошибку:java.lang.VerifyError: Ожидание кадра stackmap в ветке при использовании PowerMockRunner
java.lang.VerifyError: Expecting a stackmap frame at branch target 63
Exception Details:
Location: (path to test class)
Reason: Expected stackmap frame at this location.
Bytecode: (Bytecode)
Мой тест выглядит следующим образом (намеренно удалили код, чтобы сделать это более кратким):
@RunWith(PowerMockRunner.class)
@PrepareForTest(MultipleOutputs.class)
public class myReducerTest {
private ReduceDriver<Text, Text, Text, Text> reduceDriver;
@Before
public void setUp() {
reduceDriver = ReduceDriver.newReduceDriver(new myReducer());
}
@Test
public void testHappyPath() throws IOException {
/*
Code to declare input key, inout value, expected output, etc.
*/
reduceDriver.withInput(myInputKey, myInputVal);
reduceDriver.withMultiOutput("reportName1", key, expectedValue1);
reduceDriver.withMultiOutput("reportName2", key, expectedValue2);
reduceDriver.runTest();
}
}
Я получаю сообщение об ошибке, когда использую @PrepareForTest. Обратите внимание: класс myReducer не имеет статических или конечных методов. Поэтому он не включен в аннотацию @PrepareForTest. Часть моего файла п (я использую Maven для строительства) выглядит следующим образом:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-easymock</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.mrunit</groupId>
<artifactId>mrunit</artifactId>
<version>1.1.0</version>
<classifier>hadoop2</classifier>
<scope>test</scope>
</dependency>
Также обратите внимание, что я использую Java 8, и не могу понизить до v7 или v6, как указано здесь: java.lang.VerifyError: Expecting a stackmap frame at branch target
I также попытался добавить плагин surefire в файл pom, как упоминалось здесь: java.lang.VerifyError: Expecting a stackmap frame at branch target 73
Ни одно из этих решений не работает в этом случае.
Если вы считаете, что кто-то предложил добавить плагин surefire к вашему pom-файлу, вы должны работать над своими навыками чтения. В самом деле. (И с «чтением» я имею в виду «чтение и понимание»). Я мог бы попытаться объяснить дальше, но если вы прочтете мое объяснение так же, как вы прочтете связанный ответ, это не поможет. – Holger
@Holger Я новичок в Java. Maven собирает все из файла POM при построении, поэтому я сделал предположение. Проверьте эту ссылку http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html Информация о плагинах находится в Project/Build – Sarin
Это не имеет ничего общего с Java. Это только чтение текста и понимание того, что он говорит. Никто не сказал, что вы должны установить этот плагин. Попытайтесь понять предыдущее предложение. – Holger