当前位置: 首页 > 知识库问答 >
问题:

testng和PowerMockito:类未准备异常

马泓
2023-03-14

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

@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
  • 标记
  • 静态方法,有些是私有的,有些是受保护的,有些是公共的
  • 我试图验证代码正在调用的方法是
    • 受保护的静态空释放(字符串callingClass,最终布尔成功)

    我用PowerMockito做错了什么?

共有1个答案

吕永寿
2023-03-14

这里是我对抽象类的测试和配置,工作很好。如果您有不同的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.
    }
}
 类似资料:
  • 我正在从专家运行 TestNG 文件,我得到了这个异常。我检查了maven的目标文件夹,没有生成任何类 [错误]未能执行目标组织 apache.maven.插件:maven-surefire-插件:2.18.1:测试(默认测试): 执行目标组织的默认测试.apache.maven.插件:maven-surefire-plugin:2.18.1:测试失败:分叉进程中存在错误 [错误]org . Te

  • 我经历了这个问题,也经历了这个问题。但他们都没有帮助。有人能让我知道我做错了什么吗?

  • 学习AngularJS的一个好方法是逐步完成本教程,它将引导您构建一个完整的AngularJS web应用程序。 该web应用是一个Android设备清单的目录列表,您可以筛选列表以便查看您感兴趣的设备,然后查看设备的详细信息。 本教程将向您展示AngularJS怎样使得web应用更智能更灵活,而且不需要各种扩展程序或插件。 通过本教程的学习,您将: 阅读示例学习怎样使用AngularJS的客户端

  • 我正在用spring Boot做一个项目。:图书馆管理系统。为了得到要计算的罚款,我已经更改了系统日期。但是,在此之后,当我重新运行应用程序时,在控制台中会出现以下错误 配置为侦听端口8080的Tomcat连接器无法启动。端口可能已在使用中,或者连接器配置错误。 验证连接器的配置,识别并停止正在侦听端口8080的任何进程,或者将此应用程序配置为侦听另一个端口。

  • 这里是错误发生的地方 当调用setString时,psClaims此时不为空。

  • 我正在尝试使用准备好的语句和TABLE_CATALOG和table_schema的参数来选择默认模式'public'中的所有表。当我创建一个准备好的语句时,系统会返回一个错误,这没有任何意义。如果我指定了TABLE_CATALOG而不指定TABLE_SCHEMA,它可以很好地工作。另外,如果指定TABLE_SCHEMA而不指定TABLE_CATALOG,它也可以正常工作。我是不是做错什么了? 线程