为什么不可能在jmock中模拟Pattern.class?

时间:2016-12-08 17:54:04

标签: java jmock

我正在尝试创建一些单元测试,但我意识到我无法使用jmock模拟Pattern.class

我收到错误说

java.lang.IllegalArgumentException: java.util.regex.Pattern is not an interface

每次我尝试做这样的事情

final Pattern mockedPattern = mockery.mock(Pattern.class);

我在互联网上查看可能是因为这是一个单独的bean而无法模仿它。

是否有任何变通方法可以嘲笑它?或以任何方式测试它?

干杯。

EDIT ----

基本上,我使用了这个答案How to disable CSRF in Spring Security 4 only for specific URL pattern through XML configuration?并且效果很好,但我需要为它创建单元测试

 private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");
    private RegexRequestMatcher unprotectedMatcher = new RegexRequestMatcher("/ext/**", null);

    @Override
    public boolean matches(HttpServletRequest request) {          
        if(allowedMethods.matcher(request.getMethod()).matches()){
            return false;
        }
        return !unprotectedMatcher.matches(request);
    }

1 个答案:

答案 0 :(得分:1)

恕我直言,您应该模拟测试您发布的代码的请求,而不是Pattern

MockHttpServletRequest req1 = new MockHttpServletRequest("GET", "/foobar");
assertThat(theThing.matches(req1)).isFalse();
// ...

请参阅MockHttpServletRequest