SwiftMockGeneratorForXcode
SwiftMockGeneratorForXcode copied to clipboard
Generate async mocks
As a developer I want get correctly generated mocks when using the new async
keyword from the concurrency feature introduced with Swift 5.5.
Using the Version 0.27 (3) I experienced the following issue: When mocking an async
function, then...
- the async keyword is not added to the mocked function
- the return value is ignored
- the
throws
keyword is ignored
// protocol
func myAsync() async
// current mock
var invokedMyAsync = false
var invokedMyAsyncCount = 0
func myAsync() {
invokedMyAsync = true
invokedMyAsyncCount += 1
}
// expected mock
var invokedMyAsync = false
var invokedMyAsyncCount = 0
func myAsync() async {
invokedMyAsync = true
invokedMyAsyncCount += 1
}
// protocol
func myAsyncReturns() async -> MyObject
// current mock
var invokedMyAsyncReturns = false
var invokedMyAsyncReturnsCount = 0
func myAsyncReturns() {
invokedMyAsyncReturns = true
invokedMyAsyncReturnsCount += 1
}
// expected mock
var invokedMyAsyncReturns = false
var invokedMyAsyncReturnsCount = 0
var stubbedMyAsyncReturnsResult: MyObject!
func myAsyncReturns() async -> MyObject {
invokedMyAsyncReturns = true
invokedMyAsyncReturnsCount += 1
return stubbedMyAsyncReturnsResult
}
// protocol
func myAsyncThrows() async throws
// current mock
var invokedMyAsyncThrows = false
var invokedMyAsyncThrowsCount = 0
func myAsyncThrows() {
invokedMyAsyncThrows = true
invokedMyAsyncThrowsCount += 1
}
// expected mock
var invokedMyAsyncThrows = false
var invokedMyAsyncThrowsCount = 0
var invokedMyAsyncThrowsError: Error?
func myAsyncThrows() async throws {
invokedMyAsyncThrows = true
invokedMyAsyncThrowsCount += 1
if let error = invokedMyAsyncThrowsError {
throw error
}
}
I have experienced the same problem. Is there any solution to this?
I could use this too in my current project. Please make it happen!
We also need this in our project.
I am here just to say that we also need this
In the meantime, a tip: Copy the protocol into the mock file, remove the keyword async
from all function names and then build the mock. Then you can add it back afterwards. The throws
functions will no longer be ignored.
We need this feature in our project. Are there any updates here?