首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java Spring/Hibernate/Maven项目中测试多步骤流程的正确方法是什么?

在Java Spring/Hibernate/Maven项目中测试多步骤流程的正确方法是什么?
EN

Stack Overflow用户
提问于 2012-03-07 02:58:21
回答 2查看 441关注 0票数 0

我最初只有一个Java Servlet,我需要对它进行单元测试。我想确保它能够正确地处理请求,所以我在jUnit测试中使用了Spring的MockHttpServletRequest,这个方法工作得很好。非常简单的单元测试。

现在,我想扩展测试,并执行一系列数据库事务和模拟http servlet请求,以模拟在一段时间内使用系统的用户。

我想我可以将所有这些都塞进一个单元测试中,但这似乎不是正确的做法,因为它会违反单元测试的精神。

那么,以这样的特定顺序测试一系列事件的正确方法是什么呢?

以下是我目前所了解的内容的精简版本:

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"testContext.xml"}) 
public class servletTest {

//Injected request
@Resource(name="mockTestServletRequest")
MockHttpServletRequest request;

@Test
public void mockRequest() {
    //perform a mock servlet request
}

那么,我是否可以通过在已有的方法之上和之下添加更多带有@Test注释的方法来模拟事件的时间轴呢?我能保证这些方法将按列出的顺序执行吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-07 03:14:42

这将是一次集成测试。看看spring's testing framework吧。这意味着您将启动spring上下文,并运行所有内容。可以使用内存中的数据库,也可以使用独立的数据库。

当一切都开始后,你可以注入一个你的控制器的实例并触发一个请求,然后再触发另一个请求。默认情况下,每个方法都在一个事务中,该事务在方法完成时回滚,因此不必担心污染数据库。

票数 3
EN

Stack Overflow用户

发布于 2012-03-07 03:20:59

从测试的角度来看,我确实同意你的观点,一个真正的单元测试应该是:测试代码中的单个接触点,而不是更多的东西。

由于您使用的是Maven,因此您实际上有一些很好的选项可用。推荐的here on codehaus可能很有价值。通过模块化您的“集成单元测试”,您可以将其分配到一个单独的目标,并让您的更智能和编排的测试生活在那里。

我使用的另一个选项是在测试中添加注释,如下所示:

代码语言:javascript
复制
@IfProfileValue(name="integration", value="true")

这允许您设置参数,决定是只运行真正的单元测试,还是运行集成测试。

最后,如果您正在使用开发数据库并希望继续这样做,这很好,但是如果这是一个连续的测试,并且您没有回滚,那么Mockito或其他模拟框架可能会为您提供很好的服务。不过,这真的取决于测试的上下文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9590078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档