我最近在一个宠物项目中着手构建自动化的UI(集成)测试以及普通的单元测试。 我想将所有这些集成到我的Maven构建中,并提供代码覆盖率报告,以便我可以了解测试覆盖率不足的区域。 我不仅发布了项目的源代码,还整理了一个简单的示例来演示如何获得所有这些设置。 因此,如果您希望集成
maven ,
junit ,
webdriver (现在为selenium)和
emma ,请继续阅读以了解我的工作方式。
首先,所有的源代码都可以在github上找到: https : //github.com/activelylazy/coverage-example 。 我将显示关键片段,但显然有很多细节被忽略了(希望如此)不相关。
示例应用
该示例应用程序不是打破传统,而是一个简单的,即使有点人为的问候世界:
怎么运行的
起始页面是指向hello world页面的简单链接:
<h1>Example app</h1>
<p>See the <a id="messageLink" href="helloWorld.html">message</a></p>
Hello World页面仅显示以下消息:
<h1>Example app</h1>
<p id="message"><c:out value="${message}"/></p>
hello world控制器渲染视图,并传递消息:
public class HelloWorldController extends ParameterizableViewController {
// Our message factory
private MessageFactory messageFactory;
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// Get the success view
ModelAndView mav = super.handleRequestInternal(request, response);
// Add our message
mav.addObject("message",messageFactory.createMessage());
return mav;
}
@Autowired
public void setMessageFactory(MessageFactory messageFactory) {
this.messageFactory = messageFactory;
}
}
最后,MessageFactory仅返回硬编码的消息:
public String createMessage() {
return "Hello world";
}
单元测试
我们定义了一个简单的单元测试,以验证MessageFactory的行为是否符合预期:
public class MessageFactoryTest {
// The message factory
private MessageFactory messageFactory;
@Test
public void testCreateMessage() {
assertEquals("Hello world",messageFactory.createMessage());
}
@Autowired
public void setMessageFactory(MessageFactory messageFactory) {
this.messageFactory = messageFactory;
}
}
建立
一个基本的maven pom文件足以构建此文件并运行单元测试。 至此,我们有了一个正在运行的应用程序,并对我们可以构建和运行的核心功能(例如它)进行了