Bird
Raised Fist0
iOS Swiftmobile~5 mins

Mock objects and protocols in iOS Swift - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a protocol in Swift?
A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. Classes, structs, or enums can adopt protocols to provide actual implementations.
Click to reveal answer
beginner
Why do we use mock objects in iOS testing?
Mock objects simulate real objects in tests. They help isolate the code being tested by replacing dependencies with controllable and predictable versions, making tests faster and more reliable.
Click to reveal answer
intermediate
How do protocols help with creating mock objects?
Protocols allow you to define interfaces that real objects and mock objects both conform to. This lets you swap the real implementation with a mock one easily during testing without changing the code that uses them.
Click to reveal answer
intermediate
What is a key benefit of using protocols for dependency injection?
Protocols enable dependency injection by allowing you to pass any object that conforms to the protocol. This makes your code more flexible and testable because you can inject mock objects during tests.
Click to reveal answer
beginner
In Swift, how do you declare that a class conforms to a protocol?
You add the protocol name after the class name, separated by a colon. For example: class MyClass: MyProtocol { }
Click to reveal answer
What is the main purpose of a mock object in testing?
ATo add new features to the app
BTo speed up the app in production
CTo replace real objects with controllable versions
DTo store user data securely
Which Swift feature allows you to define a set of methods that a class must implement?
AProtocol
BEnum
CStruct
DExtension
How do mock objects improve test reliability?
ABy isolating dependencies and controlling behavior
BBy introducing random data
CBy making tests run slower
DBy connecting to real databases
What keyword do you use in Swift to declare a protocol?
Aclass
Bprotocol
Cinterface
Dstruct
Which of these is a benefit of using protocols for dependency injection?
AHardcoding dependencies
BMaking code less testable
CIncreasing app size
DAllowing easy swapping of implementations
Explain how protocols and mock objects work together to improve testing in Swift.
Think about how you can replace a real part of your app with a fake one during tests.
You got /4 concepts.
    Describe the steps to create a mock object for a protocol in Swift.
    Start with the protocol, then build a fake version that follows its rules.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a mock object in Swift testing?
      easy
      A. To improve app performance in production
      B. To simulate real objects for testing without using actual implementations
      C. To create user interface elements dynamically
      D. To store user data securely

      Solution

      1. Step 1: Understand the role of mock objects

        Mock objects are used to imitate real objects during testing to isolate code behavior.
      2. Step 2: Identify the purpose in testing context

        They help test code without relying on real implementations that may be complex or unavailable.
      3. Final Answer:

        To simulate real objects for testing without using actual implementations -> Option B
      4. Quick Check:

        Mock objects = simulate real objects [OK]
      Hint: Mocks imitate real parts only for testing [OK]
      Common Mistakes:
      • Confusing mocks with production code
      • Thinking mocks improve app speed
      • Using mocks for UI creation
      2. Which of the following is the correct way to declare a protocol in Swift?
      easy
      A. interface MyProtocol { func doSomething() }
      B. class MyProtocol { func doSomething() }
      C. protocol MyProtocol { func doSomething() }
      D. struct MyProtocol { func doSomething() }

      Solution

      1. Step 1: Recall Swift syntax for protocols

        Protocols in Swift are declared using the keyword protocol.
      2. Step 2: Compare options

        protocol MyProtocol { func doSomething() } uses protocol keyword correctly; others use class, struct, or interface which are incorrect for protocols.
      3. Final Answer:

        protocol MyProtocol { func doSomething() } -> Option C
      4. Quick Check:

        Swift protocol declaration = protocol keyword [OK]
      Hint: Protocols start with the keyword 'protocol' [OK]
      Common Mistakes:
      • Using class or struct instead of protocol
      • Using 'interface' which is not Swift syntax
      • Missing the protocol keyword
      3. Given the protocol and mock class below, what will be printed when calling mock.fetchData()?
      protocol DataFetcher {
        func fetchData() -> String
      }
      
      class MockFetcher: DataFetcher {
        func fetchData() -> String {
          return "Mock Data"
        }
      }
      
      let mock = MockFetcher()
      print(mock.fetchData())
      medium
      A. "Real Data"
      B. Runtime crash
      C. Compilation error
      D. "Mock Data"

      Solution

      1. Step 1: Analyze the protocol and mock class

        The protocol requires a method fetchData() returning a String. The mock class implements it returning "Mock Data".
      2. Step 2: Check the print statement output

        Calling mock.fetchData() returns "Mock Data", so that is printed.
      3. Final Answer:

        "Mock Data" -> Option D
      4. Quick Check:

        Mock method returns "Mock Data" [OK]
      Hint: Mock returns its own defined value, not real data [OK]
      Common Mistakes:
      • Assuming it returns 'Real Data'
      • Expecting a compile error due to protocol
      • Thinking it crashes at runtime
      4. What is wrong with the following mock class implementation?
      protocol Service {
        func execute() -> Bool
      }
      
      class MockService: Service {
        func execute() {
          print("Executed")
        }
      }
      medium
      A. The mock class does not implement the protocol method signature correctly
      B. The mock class should be a struct, not a class
      C. The protocol cannot be implemented by a class
      D. The method should return Void, not Bool

      Solution

      1. Step 1: Compare protocol method signature with mock method

        The protocol requires execute() to return a Bool, but the mock method returns Void.
      2. Step 2: Identify the mismatch causing error

        This mismatch causes a compile error because the mock does not conform properly.
      3. Final Answer:

        The mock class does not implement the protocol method signature correctly -> Option A
      4. Quick Check:

        Method signature mismatch = error [OK]
      Hint: Method signatures must match exactly in mocks [OK]
      Common Mistakes:
      • Ignoring return type mismatch
      • Thinking class vs struct matters here
      • Believing protocols can't be implemented by classes
      5. You want to test a view controller that depends on a network service. Which approach correctly uses a mock object and protocol to isolate the test?
      protocol NetworkService {
        func fetchData(completion: (String) -> Void)
      }
      
      class MockNetworkService: NetworkService {
        func fetchData(completion: (String) -> Void) {
          completion("Test Data")
        }
      }
      
      // In test:
      let mockService = MockNetworkService()
      let viewController = MyViewController(service: mockService)
      viewController.loadData()
      What is the benefit of this setup?
      hard
      A. It allows testing the view controller without real network calls
      B. It speeds up the real network requests
      C. It automatically updates the UI without code
      D. It stores data permanently on the device

      Solution

      1. Step 1: Understand the use of protocol and mock

        The protocol defines the network service interface. The mock provides test data without real network calls.
      2. Step 2: Identify the testing benefit

        This setup isolates the view controller from real network dependencies, making tests reliable and fast.
      3. Final Answer:

        It allows testing the view controller without real network calls -> Option A
      4. Quick Check:

        Mock isolates tests from real network [OK]
      Hint: Mocks avoid real network calls in tests [OK]
      Common Mistakes:
      • Thinking mocks speed up real network
      • Assuming UI updates automatically
      • Confusing mocks with data storage
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard