java unit test Mock框架jMockit示例教程 - 完整的Mock步骤,mockjmockit,一个完整的Mock会有三
分享于 点击 16442 次 点评:36
java unit test Mock框架jMockit示例教程 - 完整的Mock步骤,mockjmockit,一个完整的Mock会有三
一个完整的Mock会有三个步骤,步骤一、record (录制);步骤二、replay 在此阶段,录制的方法可能会被调用;步骤三、验证。如果是Expectations就没有必要做Verifications了。
package cn.outofmemory.jmockit.sample; import jmockit.target.OfferPostAction; import jmockit.target.WinportUrlServiceImpl; import junit.framework.Assert; import mockit.Mocked; import mockit.NonStrictExpectations; import mockit.Verifications; import org.junit.Test; /** * 一个完整的Mock会有三个步骤,步骤一、record (录制);步骤二、replay 在此阶段,录制的方法可能会被调用;步骤三、验证。如果是Expectations就没有必要做Verifications了。 * @author Ginge * */ public class RecordReplayVerificationTest { @Mocked private WinportUrlServiceImpl winportUrlService = null; private OfferPostAction offerPostAction = new OfferPostAction(); @Test public void testofferPostActionExecute() { final String memberId = "test2009"; // 步骤一、record (录制) new NonStrictExpectations() { { // 期望被mock的调用,以及被调用时返回的结果 winportUrlService.hasWinport(memberId); result = false; // 也可以是returns(false); // 总共可以调用的次数 times = 1; } }; // 步骤二、replay 在此阶段,录制的方法可能会被调用 Assert.assertEquals(false, offerPostAction.hasWinport(memberId)); try{ offerPostAction.getWinportUrlThrowException(memberId); }catch(Exception e){ //fully mock,默认完全被mock,到这里就注定失败 Assert.fail(); } // 步骤三、验证步骤二中,mock方法是否被调用,本步骤可以省略 new Verifications() { { winportUrlService.hasWinport(withAny("")); times = 1; } }; } }
用户点评