   }
   
   func testObserveChangesUsingBackgroundContextWithoutChanges() {
-    let expectation = self.expectation(description: "\(#function)\(#file)")
+    let expectation = self.expectation(description: "\(#function)\(#line)")
     expectation.isInverted = true
     let context = container.newBackgroundContext()
     let event = ObservedManagedObjectContextEvent.change

    _ = observer // remove unused warning...

    // performBlockAndWait will always run in the calling thread.
    // Using a DispatchQueue we are making sure that it's not run on the Main Thread
    DispatchQueue.global().async {
      context.performAndWait {
        XCTAssertFalse(Thread.isMainThread)
        (1...1000).forEach({ i in
          let car = Car(context: context)
          car.maker = "FIAT"
          car.model = "Panda"
          car.numberPlate = UUID().uuidString
          car.maker = "123!"

          let person = Person(context: context)
          person.firstName = UUID().uuidString
          person.lastName = UUID().uuidString

          car.owner = person
        })

        XCTAssertTrue(context.hasChanges, "The context should have uncommitted changes.")
        context.processPendingChanges()
      }

    waitForExpectations(timeout: 5)
  }

  func testObserveChangesUsingBackgroundContextAndDispatchQueue() {
    let expectation = self.expectation(description: "\(#function)\(#line)")
    let context = container.newBackgroundContext()
    let event = ObservedManagedObjectContextEvent.change
    let observer = ManagedObjectContextChangesObserver(kind: .one(context: context), event: event) { (change, event, observedContext) in
      XCTAssertFalse(Thread.isMainThread)
      XCTAssertTrue(context === observedContext)
      XCTAssertEqual(change.inserted.count, 200)
      XCTAssertTrue(change.deleted.isEmpty)
      XCTAssertTrue(change.refreshed.isEmpty)
      XCTAssertTrue(change.updated.isEmpty)
