seanhenry / SwiftMockGeneratorForXcode

An Xcode extension (plugin) to generate Swift test doubles automatically.
MIT License
748 stars 47 forks source link

Generate async mocks #54

Open alschmut opened 2 years ago

alschmut commented 2 years ago

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...

// 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
    }
}
Allje commented 2 years ago

I have experienced the same problem. Is there any solution to this?

pkurzok commented 2 years ago

I could use this too in my current project. Please make it happen!

PatrickGaissert commented 2 years ago

We also need this in our project.

MatiasGinart commented 1 year ago

I am here just to say that we also need this

jowie commented 1 year ago

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.

beyzaince commented 1 year ago

We need this feature in our project. Are there any updates here?