複数の出力をテストするために ReduceDriver を使用するために、プロジェクトで MRUnit バージョンを 1.1.0 にアップグレードしました。テストに変更を加えた後 (アップグレードで動作するようにするため)、次のエラーが発生します。
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クラスには static または final メソッドがないことに注意してください。そのため、 @PrepareForTest アノテーションには含まれていません。私のpomファイルの一部(ビルドに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
ここに記載されているように、pomファイルにsurefireプラグインを追加しようとしました: java.lang.VerifyError: Expecting a stackmap frame at branch target 73
この場合、これらのソリューションはどれも機能しません。