【问题标题】:how to mock the objects that are instantiated inside a class but not inside any member functions如何模拟在类内部但不在任何成员函数内部实例化的对象
【发布时间】:2018-10-12 10:47:34
【问题描述】:

假设我们有这样一个类:-

class A {
internal val obj : Obj      
     get() = Application.getbean(Obj::class) 
fun method1(){
val result = obj.somefunc()
..../code/
  }
fun method2(){
...../code/
  }
}

我不想使用 junit mockito 框架编写单元测试来测试 method1 的功能,也不想模拟 obj object 。在 stackoverflow 上的其他一些线程中,人们建议使用注入的构造函数依赖,但在我的情况下这是不可能的,因为循环依赖的问题。在其他一些答案中,人们建议将此对象实例化移动到方法中,但我不想那样做。有没有办法模拟这个 obj 对象。

【问题讨论】:

    标签: unit-testing junit kotlin mockito


    【解决方案1】:

    很难对以不可测试的方式编写的代码进行单元测试。这就是为什么你应该注入依赖而不是持有它们,这就是为什么你应该获取对象而不是自己创建它们的原因。如果您假设您的代码可能会被测试,请始终首先考虑如何测试。

    在您的情况下,模拟 Obj 有点困难,但并非不可能,因为对象的实际创建(构造函数调用)是使用不同的类(不是被测试的类)完成的。

    在您的示例中,您使用的是静态方法,也许您可​​以使用 PowerMockito 模拟它的行为?请看看这个answer

    除此之外,我只能建议更改代码。 将对象创建类作为依赖注入或使用其他方法,这可能涉及一些架构更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2017-05-17
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多