как смоделировать объекты, которые создаются внутри класса, но не внутри каких-либо функций-членов - PullRequest
0 голосов
/ 12 октября 2018

Предположим, у нас есть такой класс: -

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.В некоторых других потоках в stackoverflow люди предлагали использовать конструктор зависимостей, но это невозможно в моем случае из-за проблемы циклической зависимости.В некоторых других ответах люди предложили перенести создание экземпляра этого объекта в метод, но я не хочу идти этим путем. Есть ли способ издеваться над этим объектом obj.

1 Ответ

0 голосов
/ 12 октября 2018

Очень трудно выполнить код модульного тестирования, который написан не для тестирования.Вот почему вы должны внедрять зависимости, а не удерживать их, поэтому вы должны получать объекты, а не создавать их самостоятельно.Если вы предполагаете, что ваш код может быть протестирован, всегда думайте, как это сделать вначале.

В вашем случае немного сложно смоделировать Obj, но это невозможно, поскольку фактическое создание (вызов конструктора) объектасделано с другим классом (не тем, который тестируется).

В вашем примере вы используете статический метод, может быть, вы можете посмеяться над его поведением с PowerMockito?Пожалуйста, взгляните на этот ответ .

Кроме этого, я просто могу предложить изменить код.Внедрить объект, создающий класс, в качестве зависимости или использовать другие подходы, которые могут включать некоторые архитектурные изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...