私はSwift 2.2で書かれた自分のプロジェクトの単体テストを書こうとしています。そのプロジェクトの一部はカスタムクラスLocalStorageManager
です。これはNSFileManagerを使用してファイルIO操作を実行し、残りのアプリケーションがアクセスするための非常に簡単なファイルのやりとりを公開します。私のテストでは実際のファイルを作成したくないので、NSFileManagerをモックする必要があります。私は何かを試してきましたが、私はそれが気に入らないのです。 iOSでシステムライブラリを模擬する方法Mockingライブラリを使用しないSwift?
import Foundation
class MockNSFileManager: NSFileManager {
override init() {
// do nothings master!!
}
override func createFileAtPath(path: String, contents data: NSData?, attributes attr: [String : AnyObject]?) -> Bool {
print("file mock created")
return true
}
override func fileExistsAtPath(path: String, isDirectory: UnsafeMutablePointer<ObjCBool>) -> Bool {
print("does the file exists?")
return false
}
override func fileExistsAtPath(path: String) -> Bool {
print("the file exists")
return true
}
override func createDirectoryAtPath(path: String, withIntermediateDirectories createIntermediates: Bool, attributes: [String : AnyObject]?) throws {
print("successfully maybe...")
}
override func contentsAtPath(path: String) -> NSData? {
print("returning some fancy contents")
return NSData()
}
override func removeItemAtPath(path: String) throws {
print("removing item at the path")
}
}
はLocalStorageManager
では、私は私のユニットテストでinit(fileManager: NSFileManager)
を実現し、私はLocalStorage(fileManager: MockNSFileManager())
としてのlocalStorageを初期化します。
すべてがうまくいっていて、期待通りです。しかし、私はテストコードが私のアプリの生産コードをどのように侵略しているのか気に入らない。 LocalStorage
クラスでは、私のアプリで実行する必要がないときに、私がinit
を実装する必要があるのが好きではありません。
私は、実際にテストコードがメインのアプリケーションコードに侵入することなく、テストを容易にするために私のカスタムクラスにモックシステムライブラリを挿入できるようにする方法を模索しています。