繁体   English   中英

是否可以使用junit测试来测试本地值?

[英]Is it possible to test a local value using a junit test?

有时我想测试方法中的中间值。 但该方法无法拆分。 所以我想知道JUnit是否只能将方法作为一个单元进行测试。 如果我可以在方法中放入类似断点的东西,并获取本地值并断言它,那就更好了。 如果不可能,你如何解决这类问题。

添加断点并不是真正的单元测试,实际上根本就没有测试。 你可以调用它来检查,但是没有Check Driven Development这样的东西。

无论如何,对单元测试不熟悉的人经常发现他们想要测试私有或本地值的问题,让它成为变量或方法。 当我开始使用TDD时,事实上我自己已经完全分阶段了。 但问题是,在单元测试中,目的是对特定功能进行黑盒测试,并从中进行所有可能的结果。 黑盒子里面发生的事情不是你的问题,也不需要进行单元测试。

如果你想测试一个中间值,那么你的方法可能太长了,应该分成两个或多个可测试的小方法。 如果不能做到那么你不应该担心测试它们。

如果中间值从另一个公共方法获取其值那么它是要在独立的单元测试来测试方法,而不是值的方法里面,你目前正在测试。

你的问题导致对TDD中D的解释。 特别是当您使用TDD来表示“测试驱动设计”时(尽管有些人更喜欢“测试驱动开发”这一短语)。

正如@Shahzeb指出的那样,也许你的方法太长了,应该分成两个方法,其中一个产生中间值,另一个产生输入。 我们倾向于以这种方式思考代码,这完全是由测试驱动的。 我们的代码设计更好,因为我们将关注点分开,以便能够开始测试它们。 所以你提出了一个很好的问题(简短的回答是“不”),这些是允许TDD改进我们设计的问题。

这个想法是你根本不测试私有(中间)值,因为它不是外部重要的(这就是你明智地将它保密的原因。)私有值表示你现在用你设置的对象中的某个状态。意图是它会影响你未来的公共接口调用,对吗? 因此,更改您的一个测试以进行两次调用。 让第一个调用按照您认为应该的方式执行所需的任何操作,然后进行第二次调用,并在设置该变量时看到它产生您期望的方式。 如果它真的是私有的,那么单元测试它的价值并不重要 - 只要它能在正确的时间正确地产生所需的结果。 但是这个建议伴随着一个警告:它正在蔓延到那个地方,你可能要求单元测试做的不仅仅是一个单元的测试。

另一个观察:你说你的方法“不能拆分”但不提供解释原因。 如果你不能改变设计,听起来更像是你可能试图将单元测试融入遗留代码,而不是执行测试驱动开发。 这完全没问题,你不必在这里放弃TDD,但也许还有其他方法需要考虑。 一旦你通过了测试,在TDD中,你可以稍微重构一下这个方法。 您谈论中间值的事实表明您的方法有太多责任。 考虑使用extract方法将更简洁的功能部分封装到更小的可测试服务方法中。

如果那不是你想要完成的,那么你试图执行的测试可能会“太大”。 也许您尝试进行的测试更多的是验收测试。 再次,这很好,验收测试也很重要,但它不再是一个单元测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM