• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

AOP@Work: 对方面进行单元测试

发布: 2008-10-14 09:20 | 作者: 不详 | 来源: 测试时代采编 | 查看: 83次 | 进入软件测试论坛讨论

领测软件测试网

清单 3. 用 JMock 测试来自方面的调用


public class DelegatedHighlightingUnitTest extends MockObjectTestCase {

  Collection words;
  private HighlightUtil original;
  private SearchResult result;
  private Mock mockUtil;

  public void setUp() throws Exception {
    super.setUp();

    setUpMockHighlightUtil();

    words = Collections.singleton("big");

    result = new SearchResult();
    result.setTitle("I am a big bear!");
    result.setHighlightedWords(words);
  }

  private void setUpMockHighlightUtil() {
    original = HighlightResults.aspectOf().getHighlightUtil();
    mockUtil = mock(HighlightUtil.class);
    HighlightResults.aspectOf().setHighlightUtil((HighlightUtil)mockUtil.proxy());
  }


  public void testHighlightUtilAppliedToTitleOfSearchResult() {
    mockUtil.expects(once())
      .method("highlight")
      .with(eq("I am a big bear!"), eq(words));
    result.getTitle();
  }
}

setUp() 方法实例化 mock 对象并将它注入到方面中。测试方法告诉 mock 等待对名为 “highlight” 的方法的调用,这个方法有两个参数:getTitle() 的返回值和在 SearchResult 中存储的单词清单。设置了期望后,测试调用 getTitle() 方法,它应当触发方面并产生预期的对 mock 的调用。如果 mock 没有收到调用,那么它就会在销毁时自动使测试失败。

注意 setUp() 方法存储了到原来 HighlightUtil 的引用。这是因为方面像大多数对象一样,是单元素(singleton)的。因此,销毁时撤销 mock 注入的影响很重要,否则,mock 会持续留在方面中并影响其他测试。这个方面的正确销毁如下所示:


  @Override
  protected void tearDown() throws Exception {
    try {
      HighlightResults.aspectOf().setHighlightUtil(original);
    } finally {
      super.tearDown();
    }
  }

优缺点

这个模式对前一个模式做了补充,只是它测试方面的横切规范和上下文处理而不是横切行为。因为不用检查方面的输出的间接副作用,所以可以更容易地产生联结点匹配和上下文传递行为中的临界用例

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网