Structure
ValueProvider
public struct ValueProvider: Hashable
Provides concrete instances of types.
To return default values for unstubbed methods, use a ValueProvider
with the initialized mock.
Mockingbird provides preset value providers which are guaranteed to be backwards compatible,
such as .standardProvider
.
let bird = mock(Bird.self)
bird.useDefaultValues(from: .standardProvider)
print(bird.name) // Prints ""
You can create custom value providers by registering values for types.
var valueProvider = ValueProvider()
valueProvider.register("Ryan", for: String.self)
bird.useDefaultValues(from: valueProvider)
print(bird.name) // Prints "Ryan"
Relationships
Conforms To
Hashable
Initializers
init()
public init()
Create an empty value provider.
init(from:)
public init(from other: ValueProvider)
Copy another value provider.
Mockingbird provides several preset value providers that can be used as the base template for custom value providers.
var valueProvider = ValueProvider(from: .standardProvider)
print(valueProvider.provideValue(for: String.self)) // Prints ""
Parameters
Name | Type | Description |
---|---|---|
other | ValueProvider |
Another value provider to copy. |
Properties
collectionsProvider
let collectionsProvider
Provides default-initialized collections. https://developer.apple.com/documentation/foundation/collections
primitivesProvider
let primitivesProvider
Provides default values for primitive Swift types. https://developer.apple.com/documentation/foundation/numbers_data_and_basic_values
basicsProvider
let basicsProvider
Provides default values for basic types that are not primitives. https://developer.apple.com/documentation/foundation/numbers_data_and_basic_values
geometryProvider
let geometryProvider
Provides default values for graphics and geometry types. https://developer.apple.com/documentation/foundation/numbers_data_and_basic_values
stringsProvider
let stringsProvider
Provides default values for string and text types. https://developer.apple.com/documentation/foundation/strings_and_text
datesProvider
let datesProvider
Provides default values for date and time types. https://developer.apple.com/documentation/foundation/dates_and_times
standardProvider
let standardProvider
All preset value providers.
Methods
hash(into:)
public func hash(into hasher: inout Hasher)
Hashes the value provider instance.
Parameters
Name | Type | Description |
---|---|---|
hasher | inout Hasher |
The hasher to use when combining the components of this instance. |
==(lhs:rhs:)
public static func ==(lhs: ValueProvider, rhs: ValueProvider) -> Bool
Returns a Boolean value indicating whether two value provider instances are equal.
Parameters
Name | Type | Description |
---|---|---|
lhs | ValueProvider |
A value to compare. |
rhs | ValueProvider |
Another value to compare. |
addSubprovider(_:)
mutating public func addSubprovider(_ provider: ValueProvider)
Add another value provider as a subprovider
Value providers can be composed hierarchically by adding subproviders. Providers added later have higher precedence.
var valueProvider = ValueProvider()
// Add a preset value provider as a subprovider.
valueProvider.addSubprovider(.standardProvider)
print(valueProvider.provideValue(for: String.self)) // Prints ""
// Add a custom value provider a subprovider.
var stringProvider = ValueProvider()
stringProvider.register("Ryan", for: String.self)
valueProvider.addSubprovider(stringProvider)
print(valueProvider.provideValue(for: String.self)) // Prints "Ryan"
Parameters
Name | Type | Description |
---|---|---|
provider | ValueProvider |
A value provider to add. |
removeSubprovider(_:)
mutating public func removeSubprovider(_ provider: ValueProvider)
Remove a previously added value provider.
Instances are internally unique such that it's possible to easily add and remove preset value providers.
var valueProvider = ValueProvider()
valueProvider.addSubprovider(.standardProvider)
valueProvider.removeSubprovider(.standardProvider)
Parameters
Name | Type | Description |
---|---|---|
provider | ValueProvider |
The value provider to remove. |
register(_:for:)
mutating public func register<K, V>(_ value: V, for type: K.Type = K.self)
Register a value for a specific type.
Create custom value providers by registering values for types.
var valueProvider = ValueProvider()
valueProvider.register("Ryan", for: String.self)
print(valueProvider.provideValue(for: String.self)) // Prints "Ryan"
Parameters
Name | Type | Description |
---|---|---|
value | V |
The value to register. |
type | K.Type |
The type to register the value under. |
registerType(_:)
mutating public func registerType<V: Providable>(_ type: V.Type = V.self)
Register a Providable
type used to provide values for generic types.
Provide wildcard instances for generic types by conforming the base type to Providable
and
registering the type. Non-wildcard instances have precedence over wildcard instances.
extension Array: Providable {
public static func createInstance() -> Self? {
return Array()
}
}
var valueProvider = ValueProvider()
valueProvider.registerType(Array<Any>.self)
// All specializations of `Array` return an empty array
print(valueProvider.provideValue(for: Array<String>.self)) // Prints []
print(valueProvider.provideValue(for: Array<Data>.self)) // Prints []
// Register a non-wildcard instance of `Array<String>`
valueProvider.register(["A", "B"], for: Array<String>.self)
print(valueProvider.provideValue(for: Array<String>.self)) // Prints ["A", "B"]
print(valueProvider.provideValue(for: Array<Data>.self)) // Prints []
Parameters
Name | Type | Description |
---|---|---|
type | V.Type |
A |
remove(_:)
mutating public func remove<T>(_ type: T.Type)
Remove a registered value for a given type.
Previously registered values can be removed from the top-level value provider. This does not affect values provided by subproviders.
var valueProvider = ValueProvider(from: .standardProvider)
print(valueProvider.provideValue(for: String.self)) // Prints ""
// Override the subprovider value
valueProvider.register("Ryan", for: String.self)
print(valueProvider.provideValue(for: String.self)) // Prints "Ryan"
// Remove the registered value
valueProvider.remove(String.self)
print(valueProvider.provideValue(for: String.self)) // Prints ""
Parameters
Name | Type | Description |
---|---|---|
type | T.Type |
The type to remove a previously registered value for. |
remove(_:)
mutating public func remove<V: Providable>(_ type: V.Type = V.self)
Remove a registered Providable
type.
Previously registered wildcard instances for generic types can be removed from the top-level value provider.
var valueProvider = ValueProvider()
valueProvider.registerType(Array<Any>.self)
print(valueProvider.provideValue(for: Array<String>.self)) // Prints []
valueProvider.remove(Array<Any>.self)
print(valueProvider.provideValue(for: Array<String>.self)) // Prints nil
Parameters
Name | Type | Description |
---|---|---|
type | V.Type |
A |