快速业务通道

TDD实践之实用主义 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
,这是一个普遍现 象,也已经有很多方法来加速测试的运行速度。但很多需要新工具的支持,而项 目组暂时没时间去切换工具。有没有其它更方便的做法?

像其它性能问题一样,我们首先需要确定瓶颈在哪里。我们发现主要是每个 测试用例运行前搭建测试所需的环境相对较为耗时,尤其是Selenium测试,它需 要启动和关闭浏览器。并且,很多测试用例其实使用相同的环境设置,只是每个 用例仅仅去断言其中一个需求。

我们可以修改Runner,让一组测试使用同一个浏览器实例,每次环境的清理 通过清理Session来完成。而我们也可以采取另外一种方法,就是合并使用相同 环境设置的测试用例,把它们的断言都放进同一个用例。

哦,这又违反了Kent Beck 为TDD制定的原则:每个测试用例最好只有一个断 言。

好,让我们再一次分析原则背后的理念。一个用例一个断言,是为了让测试 更清晰,更精确的描述需求,测试失败更容易定位。那么有没有一种方法,既能 让多个断言共享相同的环境设置,又能清晰精确的描述需求呢?

想想,我们用什么来描述需求?是测试用例的名称,确切的说,是函数的名称 。只要我们把一组组相关的断言封装到一个个函数里,给它们一个能够清晰精确 的描述这组断言对应的需求的名称,然后在测试用例里面调用这些函数就可以了 。这样我们只需为多个断言设置一次环境,而同时又保留了清晰精确的表达需求 的能力。

@Test    public void test_should_show_step_details_info_in_todo_item_page() throws Exception {      TodoItemPage page = navigator.gotoTodoItemPage( );      should_show_step_name_as_page_title (activeStepOfNonStartedInstance, page);      should_show_start_processing_button_if_current_step_status_is_waiting (page);      should_show_transition_buttons (activeStepOfNonStartedInstance, page);      should_NOT_ask_user_to_input_his_opinion_if_current_step_status_is_NOT _processing(page);      should_show_comment_box_after_click_start_process (page);    }    private void should_show_step_name_as_page_title(FlowStep step, TodoItemPage page) {      assertEquals(step.getName(), page.title());    }    private void should_show_start_processing_button_if_current_step_status_is_waiting (TodoItemPage page) {      assertTrue(page.isStartProcessingButtonVisible());    }    private void should_show_comment_box_after_click_start_process (TodoItemPage page) {      page。clickStartProcessingButton();      assertTrue(page.isCommentBoxAppear());    }    private void should_ask_user_to_input_his_opinion_if_current_step_status_is_process ing(TodoItemPage page) {      assertTrue(page.isCommentBoxVisible());      assertTrue(page.isActionButtonsVisible());    }    private void should_ask_user_to_select_next_step_operators (FlowTransitionDefinition nextTransitonOfStep,                                 TodoItemPage page) {      assertTrue(page。isUserGroupVisible (nextTransitonOfStep.getId()));    }    ……

小结

回过头来我们看看上面的三个实践,它们如出一辙的,一次又一次的"违反" 了某种原则。它们分别是"不能用汉语","不能一次编写多个测试用例",和"不 能在一个用例里面使用多组断言",而实际上,我们违反的只是这些原则的外在 形

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号