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

Powermockito给我一个空异常

司空昊阳
2023-03-14

我试图模拟一些静态方法,但得到以下堆栈跟踪

java.lang.NullPointerException
at de.unibonn.iai.eis.luzzu.semantics.utilities.SPARQLHelper.toSPARQL(SPARQLHelper.java:12)
at de.unibonn.iai.eis.luzzu.semantics.utilities.DAQHelper.getDomainResource(DAQHelper.java:51)
at de.unibonn.iai.eis.luzzu.semantics.utilities.DAQHelper.getCategoryResource(DAQHelper.java:47)
at de.unibonn.iai.eis.luzzu.annotations.QualityMetadataTest.createMockedMetric(QualityMetadataTest.java:211)
at de.unibonn.iai.eis.luzzu.annotations.QualityMetadataTest.<init>(QualityMetadataTest.java:81)
....

DAQHelper是一个静态类,它是从我当前正在测试的方法调用的。为了保持故事简短,我有一个方法addMetricData(…)调用getCategoryResource(…)等此getCategoryResource(…)是一个公共静态方法,它反过来调用getDomainResource(DAQHelper中的私有静态方法)。getDomainResource(…)方法调用静态SPARQLHelper。toSPARQL(…)方法

你知道我为什么会有这个问题吗?测试代码如下:

@RunWith(Parameterized.class)

@PrepareForTest({DAQHelper.class,SPARQLHelper.class})公共类QualityMetadataTest扩展了断言{

@Rule
public PowerMockRule rule = new PowerMockRule();

private QualityMetric metric;
private Model m = ModelFactory.createDefaultModel();
private QualityMetadata _testClass;
private Dataset _dataset;

private Resource metricResource = m.createResource("example:mockedMetric");
private Resource categoryResource = m.createResource("example:mockedCategory");
private Resource dimensionResource = m.createResource("example:mockedDimension");
private Resource dimensionProperty = m.createResource("example:hasMockedDimensionProperty");
private Resource metricProperty = m.createResource("example:hasMockedMetricProperty");
private Resource computedOn = m.createResource("example:testing");
private Resource qualityGraphURI;

private Resource categoryURI;
private Resource dimensionURI;
private Resource metricURI;

private boolean parameter;

@Parameters
public static Collection<Object[]> data() {
    Object[][] data = new Object[][] { { false } };
    return Arrays.asList(data);
}

public QualityMetadataTest(boolean QualityMetadataExists) throws Exception{
    this.parameter = QualityMetadataExists;
    if (QualityMetadataExists){
        // fill model m with quality metadata
    }

    this.createMockedMetric();

    _testClass = new QualityMetadata(m,computedOn);
    _testClass.addMetricData(metric);
    _dataset = _testClass.createQualityMetadata();
} 
// some test methods
    private void createMockedMetric() throws Exception{     
    metric = mock(QualityMetric.class);
    when(metric.getMetricURI()).thenReturn(metricResource);
    when(metric.metricValue()).thenReturn(0.5);


    mockStatic(DAQHelper.class);    
    PowerMockito.when(DAQHelper.getCategoryResource(metricResource)).thenReturn(categoryResource);
    PowerMockito.when(DAQHelper.getDimensionResource(metricResource)).thenReturn(dimensionResource);
    PowerMockito.when(DAQHelper.getPropertyResource(dimensionResource)).thenReturn(dimensionProperty);
    PowerMockito.when(DAQHelper.getPropertyResource(metricResource)).thenReturn(metricProperty);
}

我的信念是,一旦“当”方法被创建,它们就会被全局创建,并且不会真正执行该方法,而只是返回结果。我可能有一个误解。你有什么想法吗?

干杯

共有1个答案

伊铭
2023-03-14

在javadoc中:<代码>所有用法都需要在类级别上注释@RunWith(PowerMockRunner.class)和@PrepareForTest 因此,看起来您不能将PrepareForTest与参数化的代码一起使用

 类似资料:
  • 我有下面的javascript... 基本上,我的 json 应该是一个有效的 json,它以 [{“dID”: 或者会是 [{前任。来自尝试捕获异常的消息... }] 不幸的是,我得到了错误JavaScript运行时错误:正则表达式中应有']' 我已经检查了我的正则表达式/^[{"dID":/RegEx101.com一些测试数据,我的测试按预期工作。有人有什么想法吗?

  • 我试图创建一个代码,我遇到了这个关于的问题: 2019-11-02 11:46:36.860 16810-16810/com。实例musicmates E/AndroidRuntime:致命异常:主进程:com。实例musicmates,PID:16810 java。lang.RuntimeException:无法启动活动组件信息{com.example.musicmates/com.exampl

  • 我正在尝试编写一个静态类的单元测试。我实际上想验证那个类上的一个方法是否被调用。 我的测试编译了,但是当我运行它时,我得到了这个异常: 但是,我的类在注释中。我的类是一个抽象类,但它在其中定义了几个静态方法。无法更改。 ServiceRunnerBase是一个抽象类,具有以下内容(我不能发布代码,它是专有的) 私有静态成员,有些成员用标记 静态方法,有些是私有的,有些是受保护的,有些是公共的 我试

  • 所以我需要为学校编写一个Java程序:它需要用户想要多少(IQ)值,然后调用一个computeMethod来计算这些值,然后生成一个输出,但有一个数字格式的Exception,我不知道它是从哪里来的。以下是我认为给我带来例外的方法: main方法只接受一个字符串,并让它计算它将在哪里被分隔成数字,然后将数字存储在一个int数组中。 此外,模态是数据中出现次数最多的元素。 (很抱歉,我刚从IDE复制

  • 我想使用RESTTemplate将POST请求发送到RestAPI。当我执行下面的代码时,它给出了null响应。但是,我得到了http状态代码200 OK。我已经适当地添加了响应模型,所以模型没有问题。甚至,当我将响应类型更改为String时,它也不给我响应。有什么建议吗?

  • 问题内容: 我有一个非常简单的应用程序,它只是一个带有选项卡视图的活动。 我已经初始化并将所有内容强制转换为应有的值,但是不断出现空指针错误,该错误始终链接回 tabHost.setup(); 我正在使用android studio,并且是java的新手。这个问题在这里已经问了很多,但所有答案都只是说要包含setup(),而我已经做到了。 这是我的.java文件: 我的代码和一些在线教程之间的唯一