这个春季训练有用吗?

时间:2009-11-09 19:45:49

标签: java spring java-ee junit

我们有一个基于Spring + Ibatis的J2EE应用程序。我计划用测试用例包围我们的DAO(通过获取spring bean来调用iBatis模板)。我对JUnit没有多少经验,所以我认为只需创建一个DAO对象然后调用其中一个方法就可以了。但我错了,结果是整个J2EE应用程序在appserver(容器)上运行,但显然JUnit测试用例在容器之外。所以,在我的测试用例中,当我创建dao的对象并调用一个方法时......它在我的DAO方法中的这样的行上失败

ApplicationInitializer.getApplicationContext().getBean("myMapclientBean");

所以我继续谷歌搜索...遇到了一些帖子,然后关注管道,我最终选择了Spring 4 day training course

想让你的家伙看到你对这门课程的看法?价格有价值吗?一个人也可以自己学习这些东西吗?通过几本书? (也许不会在4天内,但是,比如说,超过一个月)。

哦,我仍然无法对这些DAO进行单元测试......> _<

4 个答案:

答案 0 :(得分:5)

我大约一年半前参加了Core Spring课程。从那时起,教学大纲显然有所改变,尽管它仍然非常相似。教练非常称职。在参加本课程之前,我正在和Spring一起工作,但在课堂上,我觉得我学会了如何做得更好。

我认为你可以从书籍,Spring的在线文档和源代码本身中获取所有原始信息,但是该类所做的是将所有内容连接在一起并教授最佳实践。也就是说,不仅仅是“如何”,还有“为什么”和“什么时候”你应该使用这样的功能。这就是为什么我觉得我的技能提高了。

教师很乐意回答有关课外作业以外的具体现实问题。所以带上问题是个好主意。

课程并不便宜。它是否值得,取决于你是否在教室和自我教学方面做得好,并利用在线社区和同龄人来获得书籍不提供的最佳实践。另外,请记住Spring不断发展。虽然你可以从课堂上获得一个良好的基础,但你仍然需要适应未来的新功能(或采取另一个课程)。

答案 1 :(得分:1)

回答问题的第二部分(我没有春季课程的经验所以无法发表评论)。

您可以在Junit测试中使用已定义的应用程序上下文,然后像在服务器容器中那样实例化DAO,如果您使用的是Junit 3.8或更早版本,则可以通过测试用例扩展AbstractTransactionalDataSourceSpringContextTests

如果您使用的是以后的Junit版本(4+),则可以使用Spring TestContext框架和注释。

两者都比Spring以及此注释RefCard

更好地解释了

答案 2 :(得分:0)

解决手头的问题:

使用Spring时,你的bean不应该真正去ApplicationContext并询问他们需要的bean - 他们应该提供setter(或构造函数),以便可以注入依赖项。

听起来像设计这些类的人与依赖注入相反。

答案 3 :(得分:0)

我使用了AbstractTransactionalDataSourceSpringContextTests路线。适合我。我已经为我们工作的远程项目实例化了junits,这构成了我们的junit测试的基础。通过

import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
public class TestBase extends AbstractDependencyInjectionSpringContextTests
{
  protected String[] getConfigLocations()
  {
    return new String[] { "classpath:conf/dataAccessContext.xml",     "classpath:conf/applicationContext-domain.xml",
    "classpath:conf/applicationContext-service.xml", "classpath:conf/applicationContext-dao.xml" };
  }

  protected Object getBeanToTest(String beanName)
  {
    return applicationContext.getBean(beanName);
  }

  protected Object getBeanToTest(Class clazz)
  {
    return applicationContext.getBean(clazz.getName());
  }

}