如何测试/设计一个具有需要在Junit测试中修改的私有字段的类?

时间:2009-11-04 10:05:15

标签: junit

假设我有一个类ClasswithPrivateState,它有一个私有字段,严格依赖于创建对象时的当前系统状态。目前,此字段在构造函数内初始化。

但后来我一直在测试这个类,因为我无法在测试方法中更改此私有字段来测试某些情况。我知道我可以使用java反射来改变它,但我想知道这是否意味着类设计是坏的还是有更好的方法来测试它?

2 个答案:

答案 0 :(得分:2)

所以我想你的对象看起来像是:

public ClassWithPrivateField() {
   this.field = determineStateFromEnvironment();
}

因此很难测试。看起来您需要注入确定环境状态的行为,并为不同的测试场景提供不同的模拟注入。也许通过一些策略对象提供determineStateFromEnvironment(),您可以在测试场景中替换它们?

答案 1 :(得分:2)

某些东西必须触发状态更改,您的测试设置是否可能初始化条件以触发此操作?我很欣赏它可能取决于很多事情,但是你应该能够“模拟”环境,假设你使用接口去耦你的组件,这应该是相当直接的。

在不了解您的设计以及它试图实现一般规则的情况下,如果测试不灵活,那么它就不会足够灵活,可以在不同情况下重复使用,而不是在没有大量重构的情况下开发。