Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testes - A que será que se destina?

Testes - A que será que se destina?

Uma talk baseada em exemplos reais de implementações de testes, a partir de experências práticas e conceitos teóricos. Os objetivos são: encorajar a implementação da cultura de testes; Para aqueles que já o fazem, aprimorar a qualidade de testes implantados; E que o conteúdo apresentado seja orientador para os que se interessem pelo tema.

Ronan Rodrigo Nunes

November 09, 2019

Transcript

49 slides
  1. Testes: A que será que se destina? Breve história sobre

    testes, boas e más práticas no ecossistema Apple Ronan Rodrigo Nunes
  2. func test_primaryButtonTapped_doesRouteToFullSheet() { // given XCTAssertTrue(router.routeToFullSheetCallCount == 0) // when

    interactor.primaryButtonTapped() // then XCTAssertTrue(router.routeToFullSheetCallCount == 1) } ✘
  3. func test_allByMonth_existingMonth_callCompletionWithItems() { var expectedGroupedFoods: [GroupedFoods]? // ... guard let

    expectedGroupedFoods = expectedGroupedFoods, firstGroup = expectedGroupedFoods.first else { XCTFail("empty expectedGroupedFoods") } XCTAssertFalse(firstGroup.foods.isEmpty) } ✘
  4. func test_allByMonth_existingMonth_callCompletionWithItems() { var expectedGroupedFoods: [GroupedFoods]? // ... if let

    expectedGroupedFoods = expectedGroupedFoods { if let firstGroup = expectedGroupedFoods.first { XCTAssertFalse(firstGroup.foods.isEmpty) } } } ✘
  5. func test_allByMonth_existingMonth_callCompletionWithItems() { var expectedGroupedFoods: [GroupedFoods]? let month = MonthGatewayFactory.make().month(number:

    1) gateway.all(byMonth: month) { expectedGroupedFoods = $0.data } XCTAssertEqual(expectedGroupedFoods?.isEmpty, false) } ✘
  6. func test_allByMonth_existingMonth_callCompletionWithItems() { var expectedGroupedFoods: [GroupedFoods]? let month = MonthGatewayFactory.make().month(number:

    1) gateway.all(byMonth: month) { expectedGroupedFoods = $0.data } XCTAssertEqual(expectedGroupedFoods?.isEmpty, false) } ✔
  7. func test_finishReport_completeFlow() { var completed = false interactor.waitForCompletion().subscribe { _

    in completed = true } .disposed(by: disposeBag) interactor.finish() XCTAssertTrue(completed) } ✘
  8. func test_finishReport_completeFlow() { var completed = false onCompleteFlow(completed = true)

    interactor.finish() XCTAssertTrue(completed) } func onCompleteFlow(_ fn: @escaping @autoclosure () -> ()) { interactor.waitForCompletion() .subscribe { _ in fn() } .disposeOnTearDown(testCase: self) } ✔
  9. class ReportTripInteractorTests: XCTestCase class ReportTripInteractor_StartTripTests: ReportTripInteractorTests class ReportTripInteractor_FinishingTripTests: ReportTripInteractorTests class

    ReportTripInteractor_SearchingTripTests: ReportTripInteractorTests class ReportTripInteractor_WaintingTripTests: ReportTripInteractorTests ✔
  10. func test_start_validInteractor_createEventAtStream() { let expectedResponse = Response(uuid: "id") shareService.fetchHandler =

    { _ in .just(expectedResponse) } worker.start(interactor) someStream.dataSubject .subscribe(onNext: { eventResponse in XCTAssertEqual(expectedResponse, eventResponse) }) .disposed(by: disposeBag) } ✘
  11. func test_start_validInteractor_createEventAtStream() { let expectedResponse = Response(uuid: "id") shareService.fetchHandler =

    { _ in .just(expectedResponse) } var eventResponse: Response? someStream.dataSubject .subscribe(onNext: { eventResponse = $0 }) .disposed(by: disposeBag) worker.start(interactor) XCTAssertEqual(expectedResponse, eventResponse) } ✔
  12. final class ListFoodPresenterViewControllerTests: XCTestCase { private let bindable: ListFoodTableViewControllerBindMock! private

    let presenter: ListFoodPresenterViewController! override func setUp() { super.setUp() bindable = ListFoodTableViewControllerBindMock() presenter = ListFoodPresenterViewController() presenter.bindable = bindable } } !
  13. final class ListFoodPresenterViewControllerTests: XCTestCase { private let bindable = ListFoodTableViewControllerBindMock()

    private let presenter = ListFoodPresenterViewController() override func setUp() { super.setUp() presenter.bindable = bindable } } ✔
  14. final class ListFoodPresenterViewControllerTests: XCTestCase { private let bindable = ListFoodTableViewControllerBindMock()

    private lazy var presenter: ListFoodPresenterViewController = { let presenter = ListFoodPresenterViewController() presenter.bindable = bindable return presenter }() } ✔

More Decks by Ronan Rodrigo Nunes

Other Decks in Programming