2015-11-15 5 views
2

Я пытаюсь высмеять файловую систему hadoop и конструктор, используя power mock и mockito. Но я получаю следующую ошибку. Я новичок в mockitos, поэтому я не уверен, что не так.Как mock файловая система hadoop

>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(); 
} 

} 

Зависимости в моей 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> 
+1

Просто из любопытства: вы считали родные функции HDFS, такие как открытие вашей 'FileSystem' с FS по умолчанию типа' FILE: // '(так же, как открытие явно LocalFileSystem)? –

+0

No Samson Я не пробовал. – Pramod

+0

Существует некоторая версия конфликта. 'MockGateway' исходит из более новой версии, а' WhiteboxImpl' - предположительно 1.3.1, который [не имеет] (https://github.com/jayway/powermock/blob/f4b1f23edcd3a90d4388afb4e8e841422db82492/reflect/src/main/java /org/powermock/reflect/internal/WhiteboxImpl.java) 'getBestMethodCandidate'. У вас есть дополнительные банки в вашем пути к классам, возможно, настроены вручную в вашей среде IDE? –

ответ

0

Это вызвано ошибкой в ​​некоторых версиях Powermock как это противоречит Java 7 в модифицированном проверки байт-кода. Обновите свою версию Powermock.

+0

Спасибо, cantido, я смог избавиться от этой ошибки. Я подтолкнул mockito - все к 1.10.8 и силу макету к 1.6.2. Теперь я получаю java.lang.NoClassDefFoundError: орг/Mockito/внутренний/создание/Util/MockitoMethodProxy \t в org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl (MockCreator.java:109) \t в орг .powermock.api.mockito.internal.mockcreation.MockCreator.mock (MockCreator.java:58) \t at org.powermock.api.mockito.PowerMockito.mock (PowerMockito.java:143) – Pramod

+0

Вы обновили оба типа "powermock- api-mockito', а также 'powermock-module-junit4' до 1.6.2? Это правильные версии, поэтому вы не должны создавать NoClasDefFoundErrors. –

+0

Да, я обновил его – Pramod

Смежные вопросы