Java hibernate验证程序的PowerMock错误(JSR-303)

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

我们正在使用powermock模拟静态方法。我们的代码如下

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,我想这就是我的问题所在