锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲乱妇老熟女爽到高潮的片,久久久久亚洲精品无码网址,久久精品国产亚洲AV麻豆网站http://www.tkk7.com/koradji/category/47735.htmlzh-cnMon, 31 Jan 2011 22:55:51 GMTMon, 31 Jan 2011 22:55:51 GMT60銆愯漿甯栥慾Mock Argument Interceptor - 涓縐嶇嫭鐗圭殑璁捐鎬濊礬http://www.tkk7.com/koradji/articles/343822.htmlkoradjikoradjiMon, 31 Jan 2011 14:24:00 GMThttp://www.tkk7.com/koradji/articles/343822.htmlhttp://www.tkk7.com/koradji/comments/343822.htmlhttp://www.tkk7.com/koradji/articles/343822.html#Feedback0http://www.tkk7.com/koradji/comments/commentRss/343822.htmlhttp://www.tkk7.com/koradji/services/trackbacks/343822.html Motivation
An Object you need to test is constructing another complex object internally which you cannot access and this object is passed to a collaborator you can replace with a mock.
Solution
Write an Interceptor (a custom jMock Stub ) to intercept the argument passed to the mocked method. The Interceptor exposes the argument, allowing for standard jUnit assertions.
Alternatives

    * Use a custom jMock Constraint when the argument's asserted state is simple.
    * Use a Fake Object when a class cannot be dynamically mocked.

Example

public void testInterceptArgument() {

    List arguments = new ArrayList();

    Mock mockSubmissionTracker = mock(SubmissionTracker.class);
    mockSubmissionTracker.expects(once()).method("record").will(captureArgumentsIn(arguments));

    SecretLottery lotto = new SecretLottery( (SubmissionTracker)mockSubmissionTracker.proxy());

    lotto.createTicket();

    LotteryTicket ticket = (LotteryTicket) arguments.get(0);
    assertEquals("Secret Number", 12345, ticket.number);
}

private Stub captureArgumentsIn(List argumentList) {

    return new ArgumentInterceptor(argumentList);

}

class ArgumentInterceptor implements Stub {

    List arguments;

    public ArgumentInterceptor(List argumentList) {
        arguments = argumentList;
    }

    public Object invoke(Invocation invocation) throws Throwable {
        arguments.addAll(invocation.parameterValues);
        return null;
    }

    public StringBuffer describeTo(StringBuffer buffer) {
        return buffer;
    }
}

The Traditional jMock approach
The traditional way to handle this with jMock is to create a custom Constraint to verify the argument passed into the mocked method. Unfortunatly, this technique can produce a less explict test and a lot of supporting code. The above example handled with a traditional jMock Constraint would look like the following...

public void testInterceptArgument() {

    Mock mockSubmissionTracker = mock(SubmissionTracker.class);
    mockSubmissionTracker.expects(once()).method("record").with(ticketNumber(12345));

    SecretLottery lotto = new SecretLottery( (SubmissionTracker) mockSubmissionTracker.proxy());

    lotto.createTicket();
}

private Constraint ticketNumber(final int ticketNumber) {

    return new Constraint() {

        public boolean eval(Object arg) {

            LotteryTicket ticket = (LotteryTicket) arg;  
            return ticketNumber == ticket.number;
        }

        public StringBuffer describeTo(StringBuffer buffer) {
            return buffer.append(ticketNumber);
        }
    }
}

While this example works fairly well, each new test method would likely require its own Constraint. When the verification in the eval method becomes complex, it can become difficult to determine why a test is failing. An Argument Interceptor allows for traditional jUnit assertions, providing clearer failures for complex verfications.


koradji 2011-01-31 22:24 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲人成日本在线观看| 91精品国产免费入口| 亚洲国产一区在线观看 | 亚洲人成网站在线观看播放青青| 久久精品亚洲男人的天堂| 好吊妞998视频免费观看在线| 91免费福利精品国产| 在线看片免费人成视频久网下载 | 24小时日本韩国高清免费| 中文字幕免费在线看电影大全| 另类图片亚洲校园小说区| 亚洲人成网站在线在线观看| 亚洲人成在久久综合网站| 亚洲高清无在码在线电影不卡| 亚洲精品午夜国产VA久久成人| 亚洲国产精品人人做人人爱| 日美韩电影免费看| 中文字幕av无码无卡免费| 最近免费中文在线视频| 日本免费人成视频在线观看| 97无码人妻福利免费公开在线视频 | 无码毛片一区二区三区视频免费播放 | 亚洲欧洲综合在线| 在线电影你懂的亚洲| 色婷婷亚洲十月十月色天| 亚洲第一区香蕉_国产a| 久久精品国产精品亚洲色婷婷 | 久久福利青草精品资源站免费| 国产人成网在线播放VA免费| 一级做a爱片特黄在线观看免费看| 精品国产亚洲第一区二区三区 | 免费被黄网站在观看| 永久免费视频v片www| 日本免费人成黄页在线观看视频| 麻豆成人精品国产免费| 在线观看亚洲免费视频| 亚洲av无码不卡私人影院| 国产乱辈通伦影片在线播放亚洲 | 日韩免费高清一级毛片| 有色视频在线观看免费高清在线直播| 午夜免费国产体验区免费的|