Методы в расширении протокола по умолчанию всегда выполняются при модульном тестировании. - PullRequest
0 голосов
/ 23 марта 2020

У меня есть протокол с реализацией по умолчанию в расширении этого протокола. Когда я пытаюсь создать конкретный фиктивный объект этого протокола для модульного тестирования, реализация по умолчанию всегда выполняется. Я не могу понять, почему. Любая помощь будет оценена. Я нахожусь на xcode 11.3

protocol ABC: AnyObject {
 func doSomething()
}

extension ABC {
 func doSomething() {
   print("Did Something")
 }

}


final class ClassToBeTested {

    var abc: ABC?

    func methodToBeTested() {
       abc?.doSomething()
    }
}

В Test Target

final class MockABC: ABC {
   func doSomething() {
     print("Did Something in Test Target")
  }
}

final class Tests: XCTestCase {

   func testMethod() {
     let obj = ClassTobeTested()
     // abc property is of type protocol ABC
     obj.abc = MockABC()

    *This line calls the default implementation of the protocol of ABC and not the 
     implementation in MockABC class - verifiable by breakpoints and print statements*

     obj.methodToBeTested()

  }

}

Я прочитал отправку static, которая происходит в таких случаях, но не смог найти какая-то конкретная причина для этого. Пожалуйста, помогите.

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