使用 JUnit5 @ExtendWith 和客户 ParameterResolver 时出现 ClassCastException

问题描述 投票:0回答:1

我目前正在学习 JUnit 以及它的一些不错的新功能。具体来说,我正在使用一个简单的 ParameterResolver,复制如下

package com.junit.test.me.junit_testing;

import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.api.extension.ParameterResolutionException;
import org.junit.jupiter.api.extension.ParameterResolver;

public class BankAccountParameterResolver implements ParameterResolver{

    @Override
    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
            throws ParameterResolutionException {
        return parameterContext.getParameter().getType() == BankAccount.class;
    }

    @Override
    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
            throws ParameterResolutionException {
        return new BankAccount(0,0);
    }

}

但是,当我在测试中使用这个 ParameterResolver 时(使用 @ExtendsWith 注释),我得到了一个奇怪的 ClassCastException

package com.junit.test.me.junit_testing;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;

//This annotation gives the following error 
//Type mismatch: cannot convert from Class<BankAccountParameterResolver> to Class<? extends Extension>[]
@ExtendWith(BankAccountParameterResolver.class)
class BankAccountDITest {

    @ParameterizedTest
    public void testDeposit(BankAccount testMe) {
        testMe.deposit(500);
        assertEquals(500, testMe.getBalance());
    }
}

我认为我的项目以某种方式导入了两个不同的 JUnit 版本,但我无法弄清楚。我的 IDE 是 Eclipse,如果有帮助的话!

我尝试遵循 Junit 5 的简单在线课程,但是我得到了

ClassCastException

当我尝试编译测试代码时。任何帮助将不胜感激,我已经尝试重新启动 Eclipse 和我的机器,但无济于事。

java eclipse maven junit classcastexception
1个回答
0
投票

问题是不知何故我在项目的不同位置有一个 BankAccountParameterResolver。一旦我只存在一个 BankAccountParameterResolver,它就可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.