【问题标题】:testng and PowerMockito: class not prepared exceptiontestng 和 PowerMockito:类未准备好异常
【发布时间】:2019-09-17 17:53:53
【问题描述】:

我正在尝试在静态类上编写单元测试。我实际上想验证是否调用了该类的方法。

@Guice(modules = testModule.class)
@PrepareForTest(ServiceRunnerBase.class)
@PowerMockIgnore("javax.management.*")
public class RunnerTest extends PowerMockTestCase {

    @BeforeMethod
    public void setUp() {
        PowerMockito.mockStatic(ServiceRunnerBase.class);
    }

    @Test
    public void testStopCallsReleaseLock() {
        // I will add code here when I get the powerMockito mockStatic to work.
    }
}

我的测试编译了,但是当我运行它时,我得到了这个异常:

    org.powermock.api.mockito.ClassNotPreparedException: 

    [Ljava.lang.Object;@2fb38899
    The class ServiceRunnerBase not prepared for test.

但是,我的课程在 @PrepareForTest 注释中。我的类ServiceRunnerBase 是一个抽象类,但它定义了几个静态方法。我无法更改ServiceRunnerBase

ServiceRunnerBase 是一个抽象类,具有以下内容(我无法发布代码,它是专有的)

  • 私有静态成员,一些标记为@Getter
  • 静态方法,一些是私有的,一些是受保护的,一些是公共的
  • 我试图验证我的代码正在调用的方法是
    • 受保护的静态无效释放(字符串调用类,最终布尔成功)

我在使用 PowerMockito 时做错了什么?

【问题讨论】:

  • 你也可以发布 ServiceRunnerBase 类
  • @Mark 你想念@RunWith(PowerMockRunner.class) 吗?
  • @RunWith 用于 JUnit,我正在使用 testng
  • 我无法发布 ServiceRunnerBase 类,它是专有的。我将在我的问题中添加一些描述。
  • ServiceRunnerBase 不是最终的对吗?

标签: java testng powermockito


【解决方案1】:

这是我对抽象类的测试和配置,并且工作正常。如果你有不同的 powermock 版本,请告诉我

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-testng</artifactId>
    <version>1.6.6</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.6.6</version>
    <scope>test</scope>
</dependency>

生产类

public abstract class SR {
    protected static void release() {

    }
}

测试类

import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.SR;

@PrepareForTest(SR.class)
public class TSR extends PowerMockTestCase {

    @BeforeMethod
    public void setUp() {
        PowerMockito.mockStatic(SR.class);
    }

    @Test
    public void testStopCallsReleaseLock() {
        // I will add code here when I get the powerMockito mockStatic to work.
    }
}

【讨论】:

    【解决方案2】:

    我在遇到同样的问题后来到这里。我也在使用 TestNG。

    我注意到我的测试中有一个自动完成错误。当我输入 @Test 时,我的 IDE 自动导入了 org.junit.Test 而不是 org.testng.annotations.Test。这导致我的测试作为 JUnit 运行,并且不了解 PowerMock 的 TestNG 特定配置。

    检查您的导入并确保 JUnit 没有潜入其中。

    在我理顺所有这些之后,我的测试成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多