如果powermock测试运行在

kjthegm6  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(531)

我已经为运行在windows上的hbase编写了一个本地集成测试,使用 HBaseTestingUtility 要设置hbase的本地示例,请执行以下操作:

public class HBaseTestServer extends ExternalResource {
    private HBaseTestingUtility hbaseUtility;

    @Override
    protected void before() throws Exception {
        System.setProperty("test.build.data.basedirectory", "C:/Temp/hbase");
        this.hbaseUtility = new HBaseTestingUtility();
        this.hbaseUtility.startMiniCluster();
   }
   ...

如果我自己运行集成测试类,它工作得很好。但是,该类在另一个测试类之后运行,该测试类使用powermock来模拟hbase:

@RunWith(PowerMockRunner.class)
@PrepareForTest({HBaseAdapter.class, Connection.class, ConnectionFactory.class})
public class HBaseAdapterTest {
    ...

如果我在我的项目上运行所有测试,powermock HBaseAdapterTest 先运行,我的集成测试失败,出现错误:

java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:606)
at org.apache.hadoop.fs.FileUtil.canWrite(FileUtil.java:977)

这是怎么回事?我假设我需要在集成测试运行之前删除所有powermock mock,但是我在网上找不到任何有用的东西。
对于任何对依赖关系感兴趣的人:

compile 'org.apache.hadoop:hadoop-client:2.8.1'
compile 'org.apache.hbase:hbase-client:1.1.2'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:2.8.0'
testCompile 'org.powermock:powermock-api-mockito2:1.7.0RC2'
testCompile 'org.powermock:powermock-module-junit4:1.7.0'
testCompile 'org.powermock:powermock-core:1.7.0'
testCompile 'org.powermock:powermock-module-junit4-rule:1.7.0'
kkih6yb8

kkih6yb81#

根据tom的评论,在不同的示例中运行测试解决了我的问题。在 build.gradle 我补充说:

test {
    forkEvery 1
}

相关问题