2017-09-27 43 views
3

我已经读过依赖注入对测试有好处,因为可以在没有依赖关系的情况下对类进行测试,但是如果A类依赖于B类或C或任何类,测试类A独立于某个类正在产生零的测试结果,而不是失败或过去的测试。是否Java的真的比直接了解Java编程更好

A类是为创建一些东西而创建的,如果在Spring中没有使用新的关键字或设置额外的文件,那么A类将不会执行任何工作。

关于使代码模块化,易读和可维护的想法:所以业务类变得更加清洁,但我们所做的只是将混淆从脏Java业务类转换为复杂的XML文件,并且必须删除用于注入松散对象的接口。

总之,似乎我们必须对某个文件进行编辑和更改,对吗?

如果我的理解缺乏,请随时将我放在我的位置,只是因为学习Spring而有点恼火,因为我看到重新安排的工作量相同。

+0

你是什么意思“产生零的测试结果,而不是失败或过去的测试”? –

+0

我之前没有进行过单元测试,所以我来自这样的想法,即当我编写一个类时,通常需要其他东西来产生任何有意义的结果。我认为,如果我的课需要一些数据,而且我不会说任何其他课,那么我的测试没有给出任何结果,我想如果我写了任何错误,编译器会好心让我知道。也许我有不好的设计实践。 – WPW

+0

如果你只是寻找依赖注入,然后使用普通的简单设计模式(或类似Guice)。然而,春天是一个为最小配置提供各种集成组件的生态系统。通过他们我们现在我们赞成通过XML的注释。 – Rafa

回答

2

依赖注入有助于单元测试,因为您可以单独测试每种方法,而不依赖于其他任何方法。这样每个单元测试就可以测试一种方法。

我会说,如果xml是令人讨厌的,那么请检查Spring引导。它基于java配置,所以没有xml,它根据你的类路径为你简化了很多配置。当我第一次开始弹簧时,我发现xml非常令人畏惧来自java背景,但基于注释的配置和spring引导完成的自动配置对于快速获取应用程序非常有用。

+0

在Spring Boot中,您可以轻松使用模拟框架进行测试,如Mockito。见http://site.mockito.org/ – Twistleton

1

IMO使用弹簧的最大优点是依赖注入,它使您的生活变得轻松。例如,如果您想创建一个具有三个依赖关系的新服务,那么您可以使用Spring轻松创建一个类。但是如果没有弹簧,你最终会写出不同的工厂方法,这会返回你正在寻找的实例。这使得你的代码在静态方法调用时非常冗长。您可能想在春季时代之前查看代码库。

同样,如果您想使用Spring或不是基于项目复杂性的个人调用。但其他特点/优势不可忽视。

XML文件或Java配置是实现弹簧配置的方式 - 您希望添加业务逻辑的方式是个人风格。唯一的问题是你应该在你的项目中保持一致。

+0

我喜欢你的答案,并且谢谢你。只有一个问题,但是如果存储库被java代码翻转了那么配置XML文件怎么样也不会变得很大呢?我认为我感到的是,我们无法消除它在其他地方被推倒的复杂性。我的意思是,如果一个项目真的很大,并且使用Sprimg,XML文件不会变得很大? – WPW

+0

的确如此。如果您使用的旧版本的Spring不支持注释,那么您的XML文件将非常庞大。否则,这不是一个大问题。我建议使用Spring的最新版本,以便XML配置问题自动解决。并且你选择任何版本的spring(旧的或新的),最小的基本配置是不能避免的(xml或Java配置)。只是习惯它而已。而且你在核心java之上获得的好处超过了基本的spring配置。 – asg

1

我建议您阅读Martin Fowler关于Inversion of Control and Dependency Injection的伟大文章,以更好地理解为什么像Spring这样的框架在编写软件时能够解决众所周知的一组常见的依赖注入问题。

正如其他人所说,没有义务使用Spring;无论你使用Spring做什么,你都可以通过抽象工厂,工厂方法或服务定位器等其他方式来完成。

如果你的项目足够小,那么你可能不会介意使用上面提到的那些设计模式来自己解决依赖注入问题。但是,根据项目规模的不同,很多人会倾向于使用已经为这些经常性头部划痕器包装了一堆解决方案的框架或库。

关于依赖注入框架在进行单元测试时的优点是你不需要测试你的类的依赖关系,而只需要测试你的类。

例如,很可能您的应用程序具有分层设计。有一个数据访问类或用于从数据源检索数据的存储库是很常见的。从逻辑上讲,你也有一个使用该DAO的课程。

很明显,您已经为您的DAO编写了单元测试,因此,当您测试业务类时(使用DAO的位置),您不必再次测试DAO。

幸运的是,由于Spring需要某种形式的DAO依赖注入,这意味着您的类必须提供一个构造函数或setter方法,通过它可以将该DAO注入到我们的业务类中,对吗?

那么,在您的业务类的单元测试期间,您可以方便地使用这些注入点来注入您自己的假DAO(即模拟对象)。这样,您可以专注于业务类的测试,并忘记重新测试DAO。

现在比较这个想法与其他解决方案,你可能已经在你自己做:

  • 您可以直接通过您的业务类中实例化DAO注入的依赖。
  • 您可以在代码中使用静态工厂方法来访问DAO。
  • 您可以使用代码中服务定位器的静态方法来访问DAO。

这些解决方案将使你的代码易于测试,因为没有简单的方式选择正是依赖我想注入到我的商务舱,而测试它的方式获得(例如你怎么改用于测试目的的静态工厂方法使用假DAO?)。

因此,在Spring中,使用XML配置或注释,可以根据许多条件轻松地将不同的依赖关系注入到服务对象中。例如,您可能有一些测试配置,显然与生产中使用的配置不同。如果您有一个临时环境,您甚至可能会为您的应用程序提供不同的XML配置依赖关系,具体取决于它是在生产环境还是集成环境中运行。

依赖关系的可插拔性是我认为的关键赢得因素。因此,正如我刚才所说的,我的建议是,首先扩展您对Spring核心(以及一般所有依赖注入框架)试图解决什么问题的理解以及为什么它很重要,并且这会给你更广泛的视角和理解这些问题的方式,你可以确定什么时候使用Spring是一个好主意,什么时候不使用。