【问题标题】:Set a variable of superclass while testing subclass in Junit在Junit中测试子类时设置超类的变量
【发布时间】:2021-08-22 17:50:15
【问题描述】:

我有一个 A 类和一个扩展 A 类的 B 类

class A{
    protected String x = "";
    Method (){
    x = "val";
    }
}
class B extends A{
     // Uses x in a method
}

如果我为 B 类中的方法编写 Junit 测试用例,我会得到 x 的值作为声明时设置的空字符串“”。有没有办法在测试 B 类方法时将 x 的值设置为“val”?

【问题讨论】:

  • 你可以通过创建一个合适的B 实例来做到这一点。它是子类,因此它还负责在需要单独值时为父类变量设置值。
  • 嗨@Tom,感谢您的评论。我已经稍微编辑了这个问题。你能建议我如何根据这个在测试用例中设置值吗
  • 这里好像有一个小误解。您首先需要设计或实现 B 类来做它需要做的任何事情才能正常工作。如果它需要使用Methodx,那么它需要适当地访问它们。然后单元测试可以测试B 的公共和受保护方法,以验证它们是否按预期工作。因此,当您的测试将x 作为空字符串而不是“val”时,问题是B,而不是您的测试。

标签: java unit-testing inheritance junit subclass


【解决方案1】:

鉴于问题的新范围,您应该能够通过创建 B 类型的对象 (bObject) 然后从 A 调用 Method() 来设置 x。

B bObject = new B();
bObject.Method();

根据您在问题中显示的方法,这将设置 X。你也可以说

B bObject = new B();
bObject.setX(str);

其中 str 代表您希望 x 用于您的测试用例的任何内容。这假设您在 A 中使用 getter 和 setter 设置了 x,这通常是最佳实践。

【讨论】:

  • 感谢您发布非常明确的答案,但我已经稍微编辑了我的问题。如果 x 是使用类 A 中的方法设置的,我如何使其工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2018-11-02
  • 1970-01-01
  • 2020-06-08
  • 2015-02-13
相关资源
最近更新 更多