我们的代码中有以下代码结构
namedParamJdbcTemplate.query(buildMyQuery(request),new MapSqlParameterSource(),myresultSetExtractor);
和
namedParamJdbcTemplate.query(buildMyQuery(request),new BeanPropertySqlParameterSource(mybean),myresultSetExtractor);
如果不使用isA matcher,我怎么能期望这些方法调用?
假设我在请求上面代码所在的方法时传递mybean和myresultSetExtractor。
答案 0 :(得分:0)
你可以这样做
Easymock.expect(namedParamJdbcTemplateMock.query(EasyMock.anyObject(String.class),EasyMock.anyObject(Map.class),EasyMock.anyObject(ResultSetExtractor.class))).andReturn(...);
同样你也可以对其他方法进行模拟。
希望这有帮助!
祝你好运!答案 1 :(得分:0)
如果您无法使用PowerMock to tell the constructors to return mock instances,那么您必须使用某种形式的匹配器。
isA
是个好人。
与anyObject
一样,在另一个答案中提出。
如果我是你,我会使用Captures。捕获是一个对象,它保存您为方法提供的值,以便稍后可以对捕获的值执行断言并检查它们是否具有您想要的状态。所以你可以这样写:
Capture<MapSqlParameterSource> captureMyInput = new Capture<MapSqlParameterSource>();
//I'm not entirely sure of the types you're using, but the important one is the capture method
Easymock.expect(namedParamJdbcTemplateMock.query(
EasyMock.anyObject(Query.class), EasyMock.capture(captureMyInput), EasyMock.eq(myresultSetExtractor.class))).andReturn(...);
MapSqlParameterSource caughtValue = captureMyInput.getValue();
//Then perform your assertions on the state of your caught value.
有很多关于捕获如何工作的例子,但this blog post是一个不错的例子。