在对象中包含 setter - 仅用于单元测试
Include setters in objects - only used in unit tests
我有一个问题...如果这些设置器仅在单元测试中使用,那么为对象中的变量添加设置器是否是不好的做法?我有一个项目,其中有一些对象是通过使用 jackson 解析 json 文件来初始化的。在单元测试中,我为变量调用了 setter,而不是总是提供 json 文件。如果我为每个测试解析 json 文件,这有点不必要的覆盖,因为我只想测试特定对象对于给定值的行为是否符合预期。
是的,这是一种不好的做法。它并不是非常糟糕,有时它是最好的选择,但它仍然很糟糕。在你的情况下,问题的根源是我有一个 Java 和 public 对某些外部 JSON 文件私有的状态(在你的情况下这可能是两害相权取其轻,但是听起来不对)
几个替代方案(也不好,但在某些情况下 - 可能更好)是:
- 将必填字段设为私有并在您的测试中直接访问它们
- 添加一个仅在测试中使用的构造函数
- 为每个测试解析 JSON 文件;您不太可能注意到任何开销。
我建议更好的选择是为此使用模拟。如果您可以为从文件中提取的值提供一个接口,那么您可以将该接口模拟为 return 您的测试值。
如果您不熟悉模拟,那么也许您可以提供一个示例。
我有一个问题...如果这些设置器仅在单元测试中使用,那么为对象中的变量添加设置器是否是不好的做法?我有一个项目,其中有一些对象是通过使用 jackson 解析 json 文件来初始化的。在单元测试中,我为变量调用了 setter,而不是总是提供 json 文件。如果我为每个测试解析 json 文件,这有点不必要的覆盖,因为我只想测试特定对象对于给定值的行为是否符合预期。
是的,这是一种不好的做法。它并不是非常糟糕,有时它是最好的选择,但它仍然很糟糕。在你的情况下,问题的根源是我有一个 Java 和 public 对某些外部 JSON 文件私有的状态(在你的情况下这可能是两害相权取其轻,但是听起来不对)
几个替代方案(也不好,但在某些情况下 - 可能更好)是:
- 将必填字段设为私有并在您的测试中直接访问它们
- 添加一个仅在测试中使用的构造函数
- 为每个测试解析 JSON 文件;您不太可能注意到任何开销。
我建议更好的选择是为此使用模拟。如果您可以为从文件中提取的值提供一个接口,那么您可以将该接口模拟为 return 您的测试值。
如果您不熟悉模拟,那么也许您可以提供一个示例。