Guice是否需要进行单元测试?

时间:2009-10-29 10:26:54

标签: unit-testing singleton guice

我被告知Guice的目标是生成可测试的代码,而不需要在单元测试中使用。但是如何在不使用Guice的情况下测试Singleton(@Singleton)?

3 个答案:

答案 0 :(得分:12)

在单元测试中你没有需要 Guice(或任何DI框架),SUT通常很小,手动DI很好而且很好。

现在关于如何“测试单身人士”。就像测试任何其他类一样,这是单例作为范围之美的一部分。在你的测试方法中创建一个“singleton”的新实例,测试它然后扔掉它。请记住,您不希望SUT受到先前测试的影响,并且您希望能够为每个测试设置不同的依赖关系,因此您使用范围而不是设计模式这一事实是一件好事。你不需要做任何特殊的测试就可以了。

答案 1 :(得分:2)

实际上,我个人认为任何需要DI框架的测试都可以怀疑 - 这听起来更像是集成测试,而不是单元测试。 单元测试应该是独立的,你应该手动和显式地连接所有依赖项,包括你不想测试的事物的模拟版本。 我知道在主流开发术语中,“单元测试”可能被稀释,意味着开发人员编写的任何测试。但这并不意味着正确使用该术语。

从那个角度来看,不,你应该(也许不应该!)依赖Guice或Spring DI。

关于Guice(等人)的好处实际上是这样的:通过将它们用于完整系统,您可以在没有任何DI的情况下进行测试。

所以我认为评价最高的答案是正确的:测试一个单例,只需创建并测试它。没有具体的魔力。

答案 2 :(得分:1)

Guice会进行依赖注入,你也需要在测试中使用它。我猜 Guice可以很容易地将注入类的实现更改为模拟对象(存根,而不是真实对象)。因此,您的测试可以在存根环境中运行,并且可以更快地进行测试,并独立于应用的其他层。