Hello, I'm trying to mock one of the singletones that I use to verify that various view managers are actually correctly calling its methods.
I have a singleton declared as such
public class ModelsManager {
static let sharedInstance = ModelsManager()
private init() {}
[...]
}
In view controllers that use singleton, it is set as a lazy computed property as such:
class MyViewController: UIViewController {
lazy var Models = {
return ModelsManager.sharedInstance
}()
[...]
}
I am trying to make fun of the SingleManager ModelManager in my XCTestCase as such:
[...]
func testSomething() {
let vc = MyViewController(nibName: "MyView", bundle: nil)
var mockModelsManager = ModelsManagerMock.sharedInstance
vc.Models = mockModelsManager
[... do something that calls a function in ModelsManager...]
expect(mockModelsManager.flag) == true
}
class ModelsManagerMock: ModelsManager {
var flag = false
override func test() {
flag = true
}
}
In the statement, expect()I getValue of type 'ModelsManager' has no member 'flag'
What am I missing here?
EDIT
It seems like I was absent, but ModelsManagerMock.sharedInstancestill returns IRModelsManager()from the superclass. Due to the fact that staticit cannot be overwritten by subclasses, how can I get around this?