java—如何模拟hadoop文件系统

iyzzxitl  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(385)

我试图用powermock和mockito来模拟hadoop文件系统和构造函数。我对Mockito斯还不熟悉,所以我不确定到底出了什么问题。

>java.lang.VerifyError: Inconsistent stackmap frames at branch target 42
Exception Details:
  Location:
    org/apache/hadoop/conf/Configured.<init>()V @42: aload_1
  Reason:
    Type uninitializedThis (current frame, locals[1]) is not assignable to 'org/apache/hadoop/conf/Configured' (stack map, locals[1])
  Current Frame:
    bci: @32
    flags: { flagThisUninit }
    locals: { uninitializedThis, uninitializedThis, null, top, 'java/lang/Object' }
    stack: { 'java/lang/Object', 'java/lang/Object' }
  Stackmap Frame:
    bci: @42
    flags: { flagThisUninit }
    locals: { uninitializedThis, 'org/apache/hadoop/conf/Configured', 'org/apache/hadoop/conf/Configuration' }
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getDeclaredConstructors(Unknown Source)
    at org.mockito.internal.creation.jmock.ClassImposterizer.setConstructorsAccessible(ClassImposterizer.java:75)
    at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:70)
    at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111)
    at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60)
    at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:70)
    at com.chubb.pipeline.transformation.TestHadoopTest.testtestme(TestHadoopTest.java:27)

      @RunWith(PowerMockRunner.class)
        @PrepareForTest({TestHadoop.class,FileSystem.class})
        @PowerMockIgnore({"org.apache.hadoop.conf.*","org.apache.hadoop.fs.*"})
     public class TestHadoopTest {

    @Test
    public void testtestme() throws Exception {

        CopyBookReader cbr = PowerMockito.mock(CopyBookReader.class);
        TestHadoop testhad = new TestHadoop();          
        PowerMockito.mockStatic(FileSystem.class);
        Configuration conf = mock(Configuration.class); 
        PowerMockito.when(FileSystem.get(conf)).thenReturn(null); 
        PowerMockito.whenNew(CopyBookReader.class).withArguments(isA(Path.class),isA(FileSystem.class)).thenReturn(cbr);
        testhad.testme();

    }

}

public class TestHadoop {

    public void testme() throws Exception{

    FileSystem fs = FileSystem.get(new Configuration());
    FileStatus[] status = fs.listStatus (new Path ("string"));
    CopyBookReader cBook = new CopyBookReader(status[0].getPath(),fs);
    cBook.toString();
}

}

my pom.xml中的依赖关系

<name>MapReduce</name> 
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!-- Component versions are defined here -->
    <!-- Note that Hadoop dependencies are defined in hadoop-meta -->
     <avro.version>1.7.6-cdh5.4.5</avro.version>
     <crunch.version>0.11.0-cdh5.4.5</crunch.version>
     <hadoop.version>2.6.0-cdh5.4.5</hadoop.version>
     <hbase.version>1.0.0-cdh5.4.5</hbase.version>
     <hive.version>1.1.0-cdh5.4.5</hive.version>
     <mrunit.version>1.1.0</mrunit.version>
     <parquet.version>1.5.0-cdh5.4.5</parquet.version>
     <pig.version>0.12.0-cdh5.4.5</pig.version>
     <spark.version>1.3.0-cdh5.4.5</spark.version>
     <sqoop.version>1.4.5-cdh5.4.5</sqoop.version>
     <zookeeper.version>3.4.5-cdh5.4.5</zookeeper.version>
    <powermock.version>1.5.4</powermock.version>
  </properties>

  <dependencies>

    <dependency>
   <groupId>jdk.tools</groupId>
   <artifactId>jdk.tools</artifactId> 
   <version>1.7.0</version>
   <scope>system</scope>
   <systemPath>C:\Program Files\Java\jdk1.7.0_79\lib\tools.jar</systemPath>
 </dependency>
         <dependency>
         <groupId>org.apache.avro</groupId>
         <artifactId>avro</artifactId>
         <version>${avro.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.avro</groupId>
         <artifactId>avro-mapred</artifactId>
         <classifier>hadoop2</classifier>
         <version>${avro.version}</version>
       </dependency>
       <dependency>
         <groupId>com.twitter</groupId>
         <artifactId>parquet-avro</artifactId>
         <version>${parquet.version}</version>
         <exclusions>
           <exclusion>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-core</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.apache.hbase</groupId>
         <artifactId>hbase-client</artifactId>
         <version>${hbase.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.hbase</groupId>
         <artifactId>hbase-server</artifactId>
         <version>${hbase.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.hive</groupId>
         <artifactId>hive-common</artifactId>
         <version>${hive.version}</version>
         <exclusions>
           <exclusion>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-core</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.apache.hive</groupId>
         <artifactId>hive-exec</artifactId>
         <version>${hive.version}</version>
         <exclusions>
           <exclusion>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-core</artifactId>
           </exclusion>
           <exclusion>
             <groupId>javax.jdo</groupId>
             <artifactId>jdo2-api</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.datanucleus</groupId>
             <artifactId>datanucleus-connectionpool</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.datanucleus</groupId>
             <artifactId>datanucleus-core</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.datanucleus</groupId>
             <artifactId>datanucleus-enhancer</artifactId>
           </exclusion>
           <exclusion>
             <groupId>org.datanucleus</groupId>
             <artifactId>datanucleus-rdbms</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.apache.pig</groupId>
         <artifactId>pig</artifactId>
         <version>${pig.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.crunch</groupId>
         <artifactId>crunch-core</artifactId>
         <version>${crunch.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.spark</groupId>
         <artifactId>spark-core_2.10</artifactId>
         <version>${spark.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.zookeeper</groupId>
         <artifactId>zookeeper</artifactId>
         <version>${zookeeper.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.sqoop</groupId>
         <artifactId>sqoop</artifactId>
         <!--  classifier>hadoop200  classifier -->
         <version>${sqoop.version}</version>
       </dependency>
       <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.15</version>
         <exclusions>
           <exclusion>
             <groupId>javax.mail</groupId>
             <artifactId>mail</artifactId>
           </exclusion>
           <exclusion>
             <groupId>javax.jms</groupId>
             <artifactId>jms</artifactId>
           </exclusion>
           <exclusion>
             <groupId>com.sun.jdmk</groupId>
             <artifactId>jmxtools</artifactId>
           </exclusion>
           <exclusion>
             <groupId>com.sun.jmx</groupId>
             <artifactId>jmxri</artifactId>
           </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>1.7.5</version>
       </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
         <version>1.7.5</version>
       </dependency>
       <dependency>
         <groupId>org.hamcrest</groupId>
         <artifactId>hamcrest-all</artifactId>
         <version>1.3</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>junit-addons</groupId>
         <artifactId>junit-addons</artifactId>
         <version>1.4</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.scalatest</groupId>
         <artifactId>scalatest_2.10</artifactId>
         <version>2.2.0</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-exec</artifactId>
         <version>1.1</version>
       </dependency>
       <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>2.4</version>
       </dependency>
       <dependency>
         <groupId>com.google.guava</groupId>
         <artifactId>guava</artifactId>
         <version>11.0.2</version>
       </dependency>   
 <dependency>
      <groupId>org.powermock.modules</groupId>
      <artifactId>powermock-module-junit4</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.powermock.api</groupId>
      <artifactId>powermock-api-mockito</artifactId>
      <version>${powermock.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <version>1.9.4</version>
    </dependency>
    <dependency>
    <groupId>org.apache.oozie</groupId>
    <artifactId>oozie-core</artifactId>
    <version>4.1.0</version>
</dependency>
<dependency>
  <groupId>org.apache.oozie</groupId>
  <artifactId>oozie-client</artifactId>
  <version>4.1.0-cdh5.4.3</version>
</dependency>
<dependency>
    <groupId>org.apache.mrunit</groupId>
    <artifactId>mrunit</artifactId>
    <version>1.1.0</version>
    <classifier>hadoop2</classifier> 
</dependency>
<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.9.1</version>
</dependency>
<dependency>
    <groupId>xalan</groupId>
    <artifactId>xalan</artifactId>
    <version>2.7.1</version>
</dependency>
  </dependencies>
  <repositories>
    <repository>
        <id>central</id>
        <name>Maven Central</name>
        <url>http://repo1.maven.org/maven2/</url>
    </repository>

    <repository>
        <id>search</id>
        <name>Maven Central search</name>
        <url>http://search.maven.org/</url>
    </repository>

    <repository>
      <id>cloudera</id>
      <url>http://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>
    <repository>
            <id>sonatype-snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
     </repository>
     <repository>
      <id>powermock-repo</id>
      <url>http://powermock.googlecode.com/svn/repo/</url>
    </repository>
     </repositories>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
zpgglvta

zpgglvta1#

这是由powermock的某些版本中的错误引起的,因为它与java7修改的字节码验证冲突。更新powermock的版本。

相关问题