Java hibernate验证程序的PowerMock错误(JSR-303)
我们正在使用powermock模拟静态方法。我们的代码如下Java hibernate验证程序的PowerMock错误(JSR-303),java,junit,bean-validation,powermock,Java,Junit,Bean Validation,Powermock,我们正在使用powermock模拟静态方法。我们的代码如下 public class ValidationLayer{ private GenericInputValidator v; public ValidationLayer(GenericValidator v){ this.v = v; } public boolean isValid(MyObject obj){ Logger.info(MyFinalClass.static
public class ValidationLayer{
private GenericInputValidator v;
public ValidationLayer(GenericValidator v){
this.v = v;
}
public boolean isValid(MyObject obj){
Logger.info(MyFinalClass.staticMethod());
return v.validate();
}
}
public class GenericInputValidator{
private MyOwnValidator validator;
//setters & getters
public boolean validate(Object toBeValidated){
validator.validate(toBeValidated);
}
}
public class MyOwnValidator(){
private Validator v;
public MyOwnValidator(){
v = Validation.byProvider(HibernateValidator.class).configure()
.buildValidationFactory().getValidator();
}
public validate(){
//this calls validator method of javax.validation.Validate and analyzes
//the result and returns true or false based on the case.
}
}
My test class looks like following where MyBean annotated with proper JSR-303 annotations
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyFinalClass.class})
public TestClass{
@Test
public void testValidationLayer(MyBean bean){
PowerMock.mockStatic(MyFinalClass.class);
EasyMock.expect(MyFinalClass.staticMethod()).andReturn("dummy data");
GenericInputValidator v = new GenericInputValidator(new MyOwnValidator());
ValidationLayer vLayer = new ValidationLayer(v);
vLayer.isValid()
}
}
然后,在运行测试时,它显示以下错误
javax.validation.ValidationException : Unable to get available provider resolvers
javax.validation.Validation$ProviderSpecificBootstrapImpl.configure()
深入挖掘后,我了解到configure正在引发引发异常的问题
当它找不到提供解析程序时,我看到了与此消息一起引发的异常
我不知道为什么在我提供HibernateValidator.class的时候它会这样说。
更奇怪的是,若我并没有使用powermock来模拟静态方法,也就是说,若我删除了我的记录器
代码,然后一切正常
是否有解决方法?检查PowerMockIgnore注释。它允许您配置哪些类,例如:javax.*不会被mock替代。什么是完整堆栈跟踪?那么您在类路径上也有Hibernate验证程序?是的,我有。有趣的是,应用程序在hibernate验证程序中运行良好,但测试失败。以前,当我没有使用那个静态方法时,测试成功地注入了powermock,只是为了模拟那个静态方法,结果毁了一切。对调用验证的方法的测试(不使用powermock)正在通过。但一旦我添加了静态方法,我就开始使用powermock,我想这就是我的问题所在