Skip to content

Instantly share code, notes, and snippets.

@petrosDemetrakopoulos
Last active April 16, 2021 06:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save petrosDemetrakopoulos/89d9829f5340667b904077d418c38d43 to your computer and use it in GitHub Desktop.
Save petrosDemetrakopoulos/89d9829f5340667b904077d418c38d43 to your computer and use it in GitHub Desktop.
Swift: Unit testing for retain cycles
import Foundation
import XCTest
class Vehicle {
private var wheels = [Wheel]()
func add(_ wheel : Wheel) {
wheels.append(wheel)
}
}
class Wheel {
private var vehicle : Vehicle
required init(vehicle : Vehicle) {
self.vehicle = vehicle
}
}
let car = Vehicle()
let wheel1 = Wheel(vehicle: car)
let wheel2 = Wheel(vehicle: car)
let wheel3 = Wheel(vehicle: car)
let wheel4 = Wheel(vehicle: car)
car.add(wheel1)
car.add(wheel2)
car.add(wheel3)
car.add(wheel4)
class testsForVehicle: XCTestCase {
override func setUp() {
super.setUp()
}
func testVehicleIsNotRetained() {
var sut: Vehicle? = Vehicle()
let wheel1 = Wheel(vehicle: sut!)
sut!.add(wheel1)
weak var weakSut = sut
//After this line, the weak reference should also be nil
sut = nil
XCTAssertNil(weakSut)
}
}
testsForVehicle.defaultTestSuite.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment