我目前正在学习 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 和我的机器,但无济于事。
问题是不知何故我在项目的不同位置有一个 BankAccountParameterResolver。一旦我只存在一个 BankAccountParameterResolver,它就可以正常工作。