2015-07-06 6 views
1

Я пытаюсь издеваться над NSUserDefaults в Swift, чтобы иметь возможность создавать тесты классов, использующих NSUserDefaults. Теперь я столкнулся с проблемой, потому что у Proxy нет публичного инициализатора, и я не могу перезаписать его. Я не могу использовать обычный прокси-сервер либо потому, что его инициализатор является закрытым и не может использоваться вне области вложенности.Swift mocking NSUserDefaults

Любые идеи, как это решить? Какие-нибудь опрятные трюки, которые могут помочь мне инициализировать FakeProxy?

public class FakeProxy : NSUserDefaults.Proxy { 
    private let defaults: NSUserDefaults 
    private let key: String 

    public init(_ defaults: NSUserDefaults, _ key: String) { 
     self.defaults = defaults 
     self.key = key 
     // Problem: Super.init isn't called before returning from initializer 
    } 
    ... 
} 

ответ

1

Вы можете реализовать FakeProxy в Objective-C и перевести его в Swift для того, чтобы обойти Swift, являющегося чрезмерной защитой.

В качестве альтернативы, возможно, вместо вашего основного кода с использованием типа NSUserDefaults он может использовать тип протокола, который реализует ваш FakeProxy, а затем также extend NSUserDefaults to implement the protocol, а затем заменяет их по типу протокола.

Смежные вопросы