https://github.com/fsaldivar-dev/experimental-test-tool-swift
Pod creado para facilitar la creación de test mediante código simple
https://github.com/fsaldivar-dev/experimental-test-tool-swift
ios ios-swift mock spy stubbed-data swift test testing
Last synced: 5 months ago
JSON representation
Pod creado para facilitar la creación de test mediante código simple
- Host: GitHub
- URL: https://github.com/fsaldivar-dev/experimental-test-tool-swift
- Owner: fsaldivar-dev
- License: mit
- Created: 2022-08-06T11:56:08.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-07-05T23:39:47.000Z (almost 2 years ago)
- Last Synced: 2025-12-25T17:55:20.694Z (6 months ago)
- Topics: ios, ios-swift, mock, spy, stubbed-data, swift, test, testing
- Language: Swift
- Homepage:
- Size: 144 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# experimental-test-tool-swift

[](https://github.com/fsaldivar-dev/experimental-test-tool-swift/issues)
[](https://github.com/fsaldivar-dev/experimental-test-tool-swift/network)
[](https://github.com/fsaldivar-dev/experimental-test-tool-swift/stargazers)
[](https://github.com/fsaldivar-dev/experimental-test-tool-swift/blob/main/LICENSE.md)


Pod creado para facilitar la creación de pruebas únitarias mediante código simple
# Roadmap
| Roadmap | Estado |
| -----------------------------------| ------------- |
| Crear código base | ✅ |
| SwiftPackage | ✅ |
| [CocoaPods](https://cocoapods.org) | ✅ |
| Example | ✅ |
| [Simple Dummy](./Sources/SpockDummy/assets//SpockableDummy.md)| ✅ |
| Spy | ⌛ 👨💻 |
| Mock | ⌛ 👨💻 |
| Stubed | ⌛ 👨💻 |
| UnitTest | ⌛ 👨💻 |
| Documentación | ⌛ 👨💻 |
| Extensiones | ⌛ 👨💻 |
### Swift Package Manager
Swift Package Manager es una herramienta para automatizar la distribución de código Swift y está integrado en el compilador Swift. Está en desarrollo temprano, pero experimental-annotation-swift admite su uso en plataformas compatibles.
Una vez que haya configurado su paquete Swift, agregar experimental-annotation-swift como dependencia es tan fácil como agregarlo al valor de dependencias de su Package.swift.
```swift
dependencies: [
.package(url: "https://github.com/fsaldivar-dev/experimental-test-tool-swift", .upToNextMajor(from: "0.0.1"))
]
```
### CocoaPods
[CocoaPods](https://cocoapods.org) es un administrador de dependencias para proyectos Cocoa. Para obtener instrucciones de uso e instalación, visite su sitio web. Para integrar AnnotationSwift en su proyecto Xcode usando CocoaPods, especifíquelo en su `Podfile`:
```ruby
source 'https://github.com/CocoaPods/Specs.git'
# Integration tests
target 'YOUR_TESTING_TARGET' do
pod SpockSwift, '0.0.2'
end
```
## [Dummy](./Sources/SpockDummy/assets//SpockableDummy.md)
**Definición**
Los objetos Dummy son objetos que no se utilizan en una prueba y solo actúan como marcadores de posición. Por lo general, no contiene ninguna implementación.
Ejemplo
````Swift
struct User: Codable, SpockDummy {
let name: String
var lastName: String
var age: Int
var profession: Profession
}
struct Profession: Codable, SpockDummy {
var name: String
var university: University
}
struct University: Codable: SpockDummy {
let name: String
var country: String
}
let user: User = try .dummy()
print(user.name) // return ""
print(user.age) // return 0
print(user.profession.name) // return ""
print(user.profession.university.name) // return ""
print(user.profession.university.country) // return ""
let user = try Profession.dummy()
print(profession.name) // return ""
print(profession.university.name) // return ""
print(profession.university.country) // return ""
let university = try University.dummy()
print(university.name) // return ""
print(university.country) // return ""
````
## [Mock](./Sources/SpockMock/assets/SpockMock.md)
| Caracteristica | Estado | Test |
| ----------------------------- | ------------- | ------------- |
| Spy | ✅ | ✅ |
| Fake return | ✅ | ✅ |
|--------------------------------|---------------|-------------- |
| Soporte a diccionarios | ❌ |
| Documentación | ❌ |
SpockMock librería creada para burlar implementación de funciones.
Ejemplo
````Swift
struct User: Decodable {
let name: String
let email: String
let phone: String
let age: Int
}
protocol Interactor {
func fetchAllUserAction() -> [Users]
}
protocol View {
func showUers(users: [Users])
}
final class Presenter {
private let interactor: Interactor
private let view: View
init(view: View, interactor: Interactor) {
self.interactor = interactor
self.view = view
}
func loadData() {
let result = interactor.getFetchUsers()
view.showUsers(users: result)
}
}
````
### Mocks
````Swift
/// Create Mocks
final class MockInteractor: Interactor, SpockMock {
@Stubbed<(), [User]>
var fetchAllUserAction
func fetchAllUser() -> [Users]
try? fetchAllUserAction.onCall(()) ?? []
}
}
final class MockView: View, SpockMock {
@Stubbed<[User], Void>
var showUersAction
func showUers(users: [Users]) {
try? loadUserListAction.onCall(userList)
}
}
````
#### Test
````Swift
extension User: SpockDummy, Equatable {
static func == (lhs: User, rhs: User) -> Bool {
lhs.name == rhs.name &&
lhs.phone == rhs.phone &&
lhs.age == rhs.age &&
lhs.email == rhs.email
}
}
final class SpockMockTest: XCTestCase {
var presenter: Presenter!
var mockInteractor = MockInteractor()
var mockView = MockView()
override func setUpWithError() throws {
presenter = PresenterImpl(view: mockView,
interactor: mockInteractor,
task: mockTask)
}
override func tearDownWithError() throws {
presenter = nil
}
func testLoadData() async throws {
// Arrage
/// Create dummy List
let listUserSpected: [User] = [
try .dummy(with: .init(at: "name", with: "Fran")),
try .dummy(with: .init(at: "name", with: "Javi"))
]
// wehn call fetchAllUser return list spected
mockInteractor.fetchAllUserAction.whenRun { _ in
listUserSpected
}
// Act, execute load data
presenter.loadData()
// Accert
XCTAssert(mockInteractor.isInvoked(stub: { $0.fetchAllUserAction }))
XCTAssert(mockView.isInvoked(stub: {$0.showUers}))
XCTAssert(mockView.compare(stub: {$0.showUers}, to: listUserSpected))
}
}
````
# Author & License
Proyecto creado por **Francisco Javier Saldivar** [](www.linkedin.com/in/fsaldivar-dev)