在对象中包含setter - 仅用于单元测试

时间:2016-10-26 07:47:43

标签: java unit-testing setter

我有一个问题......如果这些设置器仅用于单元测试,那么在对象中为变量添加setter是不好的做法吗?我有一个项目,我有一些通过使用jackson解析json文件初始化的对象。在单元测试中,我调用了变量的setter而不是总是提供json文件。如果我为每个测试解析json文件,这是一个不必要的重叠,因为我只想测试特定对象的行为与给定值的预期一致。

2 个答案:

答案 0 :(得分:3)

是的,这是一种不好的做法。这不是糟透了,有时它是最好的选择,但仍然很糟糕。在你的情况下问题的根源我有一个私有的Java和公共的一些外部JSON文件(在你的情况下可能是两个邪恶中较小的,但听起来不正确)

一些替代方案(也很糟糕,但在某些情况下 - 可能更好)将是:

  • 将必填字段打包为私有,并直接在测试中访问它们
  • 添加仅在测试中使用的构造函数
  • 解析每个测试的JSON文件;你不太可能注意到任何开销。

答案 1 :(得分:0)

我建议更好的选择是使用模拟。如果您可以为从文件中提取的值提供接口,则可以模拟该接口以返回测试值。

如果你不熟悉嘲笑那么也许你可以提供一个例子。