Skip to content

Commit e5a7121

Browse files
Append SwiftMockConfiguration module for correct engine configuration
fixes MetalheadSanya#56, fixes MetalheadSanya#55
1 parent b7d3aee commit e5a7121

11 files changed

+87
-26
lines changed

Package.swift

+8
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ let package = Package(
1313
name: "SwiftMock",
1414
targets: ["SwiftMock"]
1515
),
16+
.library(
17+
name: "SwiftMockConfiguration",
18+
targets: ["SwiftMockConfiguration"]
19+
),
1620
.executable(
1721
name: "SwiftMockClient",
1822
targets: ["SwiftMockClient"]
@@ -37,6 +41,9 @@ let package = Package(
3741
// Library that exposes a macro as part of its API, which is used in client programs.
3842
.target(name: "SwiftMock", dependencies: ["SwiftMockMacros"]),
3943

44+
// Library that contains configuration of engine
45+
.target(name: "SwiftMockConfiguration", dependencies: ["SwiftMock"]),
46+
4047
// A client of the library, which is able to use the macro in its own code.
4148
.executableTarget(name: "SwiftMockClient", dependencies: [
4249
.product(name: "SwiftCompilerPlugin", package: "swift-syntax"),
@@ -49,6 +56,7 @@ let package = Package(
4956
dependencies: [
5057
"SwiftMock",
5158
"SwiftMockMacros",
59+
"SwiftMockConfiguration",
5260
.product(name: "SwiftSyntaxMacrosTestSupport", package: "swift-syntax"),
5361
]
5462
),

Sources/SwiftMock/Documentation.docc/Usage/Introduction.md

+25
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,31 @@ public protocol SomeProtocol {
2020

2121
This macro will generate a new public type with the protocol name and the suffix `Mock`. In our example, the type name will be `SomeProtocolMock`.
2222

23+
### Test setup
24+
25+
In test case you should perform some actions for correct working of engine.
26+
27+
First of all you shoud import `SwiftMockConfiguration` module.
28+
29+
You should override `setUp()` and `tearDown()` methods. In `setUp()` method you must set `continueAfterFailure` to false and call `setUp()` function of `SwiftMockConfiguration` module. In `tearDown()` you must call `tearDown()` function of `SwiftMockConfiguration` module.
30+
31+
```swift
32+
final class Tests: XCTestCase {
33+
override func setUp() {
34+
continueAfterFailure = false
35+
SwiftMockConfiguration.setUp()
36+
}
37+
38+
override func tearDown() {
39+
SwiftMockConfiguration.tearDown()
40+
super.tearDown()
41+
}
42+
43+
...
44+
```
45+
46+
> Important: `continueAfterFailure` is important for correct running of test.
47+
2348
### Stubbing basics
2449

2550
Let's add the `getAlbumName()` method to our protocol, which returns the name of the album with the `String` type. And let's move on to writing the test.

Sources/SwiftMock/SwiftMock.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
public macro Mock() = #externalMacro(module: "SwiftMockMacros", type: "MockMacro")
33

44
public var testFailureReport: (String) -> Void = { _ in
5-
5+
assertionFailure("Please import SwiftMockConfiguration module and call 'SwiftMockConfiguration.setUp()' in 'setUp()' method of your XCTestCase subclass.")
66
}
77

88
public func cleanUpMock() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//
2+
// Configuration.swift
3+
//
4+
//
5+
// Created by Alexandr Zalutskiy on 20/11/2023.
6+
//
7+
8+
import SwiftMock
9+
import XCTest
10+
11+
public enum SwiftMockConfiguration {
12+
public static func setUp() {
13+
testFailureReport = {
14+
XCTFail($0)
15+
}
16+
}
17+
18+
public static func tearDown() {
19+
cleanUpMock()
20+
}
21+
}

Tests/SwiftMockTests/ArgumentMatcherTests.swift

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import SwiftMock
2+
import SwiftMockConfiguration
23
import XCTest
34

45
@Mock
@@ -9,13 +10,11 @@ protocol ArgumentMatcherTestProtocol {
910
final class ArgumentMatcherTests: XCTestCase {
1011
override func setUp() {
1112
continueAfterFailure = false
12-
testFailureReport = { message in
13-
XCTFail(message)
14-
}
13+
SwiftMockConfiguration.setUp()
1514
}
1615

1716
override func tearDown() {
18-
cleanUpMock()
17+
SwiftMockConfiguration.tearDown()
1918
super.tearDown()
2019
}
2120

Tests/SwiftMockTests/AssociatedTypeStubbingTests.swift

+3-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import Foundation
99
import SwiftMock
10+
import SwiftMockConfiguration
1011
import XCTest
1112

1213
@Mock
@@ -26,13 +27,11 @@ final class AssociatedTypeStubbingTests: XCTestCase {
2627
override func setUp() {
2728
super.setUp()
2829
continueAfterFailure = false
29-
testFailureReport = { message in
30-
XCTFail(message)
31-
}
30+
SwiftMockConfiguration.setUp()
3231
}
3332

3433
override func tearDown() {
35-
cleanUpMock()
34+
SwiftMockConfiguration.tearDown()
3635
super.tearDown()
3736
}
3837

Tests/SwiftMockTests/InOrderTests.swift

+3-4
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,18 @@
77

88
import Foundation
99
import SwiftMock
10+
import SwiftMockConfiguration
1011
import XCTest
1112

1213
final class InOrderTests: XCTestCase {
1314
override func setUp() {
1415
super.setUp()
1516
continueAfterFailure = false
16-
testFailureReport = { message in
17-
XCTFail(message)
18-
}
17+
SwiftMockConfiguration.setUp()
1918
}
2019

2120
override func tearDown() {
22-
cleanUpMock()
21+
SwiftMockConfiguration.tearDown()
2322
super.tearDown()
2423
}
2524

Tests/SwiftMockTests/MethodStubbingTests.swift

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import SwiftMock
2+
import SwiftMockConfiguration
23
import XCTest
34

45
enum CustomError: Error {
@@ -63,9 +64,12 @@ protocol MethodProtocol {
6364
final class MethodStubbingTests: XCTestCase {
6465
override func setUp() {
6566
continueAfterFailure = false
66-
testFailureReport = { message in
67-
XCTFail(message)
68-
}
67+
SwiftMockConfiguration.setUp()
68+
}
69+
70+
override func tearDown() {
71+
SwiftMockConfiguration.tearDown()
72+
super.tearDown()
6973
}
7074

7175
func testEmptyProtocol() throws {

Tests/SwiftMockTests/PropertyStubbingTests.swift

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import SwiftMock
2+
import SwiftMockConfiguration
23
import XCTest
34

45
@Mock
@@ -29,9 +30,11 @@ protocol AsyncThrowsGetPropertyProtocol {
2930
final class PropertyStubbingTests: XCTestCase {
3031
override func setUp() {
3132
continueAfterFailure = false
32-
testFailureReport = { message in
33-
XCTFail(message)
34-
}
33+
SwiftMockConfiguration.setUp()
34+
}
35+
36+
override func tearDown() {
37+
SwiftMockConfiguration.tearDown()
3538
}
3639

3740
func testGetProperty() {

Tests/SwiftMockTests/SubscriptStubbingTests.swift

+3-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//
77

88
import SwiftMock
9+
import SwiftMockConfiguration
910
import XCTest
1011

1112
@Mock
@@ -18,13 +19,11 @@ protocol SubscriptProtocol {
1819
final class SubscriptStubbingTests: XCTestCase {
1920
override func setUp() {
2021
continueAfterFailure = false
21-
testFailureReport = { message in
22-
XCTFail(message)
23-
}
22+
SwiftMockConfiguration.setUp()
2423
}
2524

2625
override func tearDown() {
27-
cleanUpMock()
26+
SwiftMockConfiguration.tearDown()
2827
super.tearDown()
2928
}
3029

Tests/SwiftMockTests/VerifyTests.swift

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import SwiftMock
2+
import SwiftMockConfiguration
23
import XCTest
34

45
@Mock
@@ -9,9 +10,12 @@ protocol VerifyTestsProtocol {
910
final class VerifyTests: XCTestCase {
1011
override func setUp() {
1112
continueAfterFailure = false
12-
testFailureReport = { message in
13-
XCTFail(message)
14-
}
13+
SwiftMockConfiguration.setUp()
14+
}
15+
16+
override func tearDown() {
17+
SwiftMockConfiguration.tearDown()
18+
super.tearDown()
1519
}
1620

1721
func testDefaultsCountDefaultArguments() {

0 commit comments

Comments
 (0)