2017-12-27 24 views
0

코어 데이터를 데이터베이스로 사용하는 응용 프로그램을 가지고 있는데 내 NSManagedObject 하위 클래스에 작성한 DB 쿼리에 대한 테스트 사례를 작성하려고하는데 삽입이 작동하면 true를 반환합니다. 성공적으로 이 같은 내 개체에 개체를 삽입하기 위해 노력하고있어 :코어 데이터 쿼리 단위 테스트 사례

func testDBInser() { 
    let appDelegate: AppDelegate = AppDelegate() 
    let managedObjectContext = appDelegate.persistentContainer.viewContext 
    let myObject: MyManagedObject = MyManagedObject(context: managedObjectContext) 
    myObject.id = 10 
    myObject.name = "testObj" 
    XCTAssertTrue(UserProfileModel().insertObjectToUserProfile(myObject)) 
} 

하지만 내 시험이 오류 받고 있어요 : NSManagedObject 만에 수 (또는 관찰) 수있는 하나의 NSManagedObjectContext

+0

'UserProfileModel() insertObjectToUserProfile (즉, myObject)'코드 무엇을하고 있습니까? 저장하기 전에 두 번째 컨텍스트에 액세스하고 개체를 확인하고 있습니까? – richardpiazza

+0

@richardpiazza nsmanagedObject 클래스에 확장 기능을 추가하고 거기에 핸들링하는 쿼리를 작성했습니다. managedObject를 사용하여 내 엔터티에 삽입합니다. – Niloufar

답변

0

인생은 CoreStore와 훨씬 쉬워이다.

func testInsert { 
    // 1. Arrange 
    let dataStack: DataStack = { 
     let dataStack = DataStack(xcodeModelName: "ModelName") 
     do { 
      try dataStack.addStorageAndWait() 
     } catch let error { 
      XCTFail("Cannot set up database storage: \(error)") 
     } 
     return dataStack 
    }() 

    // 2. Action 
    do { 
     try dataStack.perform(synchronous: { transaction in 
      let object = transaction.create(Into<TestObject>()) 
      object.name = "Test" 
     }) 
    } catch let error { 
     XCTFail("Cannot perform database transaction: \(error)") 
    } 

    // 3. Assert 
    do { 
     try dataStack.perform(synchronous: { transaction in 
      guard transaction.fetchOne(From<TestObject>(), Where("name", isEqualTo: "Test")) != nil else { 
       XCTFail("Cannot get database object") 
      } 
     }) 
    } catch let error { 
     XCTFail("Cannot perform database transaction: \(error)") 
    } 
} 
+0

안녕하세요, 귀하의 답장을 보내 주셔서 감사합니다. 게시 방법에 대한 의견을 읽어 주시면 메소드를 호출하고 싶습니다. 내 자신의 클래스에서 실패합니다. – Niloufar