Skip to content

Instantly share code, notes, and snippets.

@DominikPetho
Last active September 15, 2020 07:36
Show Gist options
  • Save DominikPetho/21d1b403c18c512aeeae06da7c3443be to your computer and use it in GitHub Desktop.
Save DominikPetho/21d1b403c18c512aeeae06da7c3443be to your computer and use it in GitHub Desktop.
Sample of Swift property wrappers for unit testing
import UIKit
@propertyWrapper
struct Printer<T> {
public var currentValue: T?
var wrappedValue: T? {
get {
print("Property wrapper value printed", currentValue)
return currentValue
}
set {
currentValue = newValue
}
}
}
protocol StorageProtocol: class {
var name: String? { get set }
var surname: String? { get set }
}
class Storage: StorageProtocol {
@Printer var name: String?
@Printer var surname: String?
}
class StorageMock: StorageProtocol {
var name: String?
var surname: String?
}
class StorageMockOverride: Storage {
var _name: String?
var _surname: String?
override var name: String? {
get {
return _name
}
set {
_name = newValue
}
}
override var surname: String? {
get {
return _surname
}
set {
_surname = newValue
}
}
}
let storage: StorageProtocol = Storage()
storage.name = "Printable Name"
storage.surname = "Printable Surname"
let storageMock: StorageProtocol = StorageMock()
storageMock.name = "Protocol mock name"
storageMock.surname = "Protocol mock surname"
let storageMockUsingOverride: StorageProtocol = StorageMockOverride()
storageMockUsingOverride.name = "Overriden name"
storageMockUsingOverride.surname = "Overriden surname"
print("Printer sample:", storage.name, storage.surname)
print("Printer mock protocol sample:", storageMock.name, storageMock.surname)
print("Printer mock override sample:", storageMockUsingOverride.name, storageMockUsingOverride.surname)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment