3

個人オブジェクトがローカル データベースに正しく保存されているかどうかを確認するためのテストを作成しています (SQLite、日付に文字列を使用)。

私のテストでは:

let testPerson = Person(firstName:"John", lastName:"Doe")

データベースに保存した後、createdAt != nil かどうかをテストします

それは大丈夫です!それで :

let testPerson2 = Person.LoadByID(testPerson.id)

これは、人物オブジェクトをデータベースから testPerson2 にロードする静的関数です。

すべてのフィールドがテストに合格しています (したがって、createdAt と updateAt の日付を除いて、testPerson と testPerson2 でまったく同じです)

これらの日付の println を実行すると、まったく同じになります。

testPerson.createdAt : Optional(2015-08-14 12:03:01 +0000)
testPerson2.createdAt :Optional(2015-08-14 12:03:01 +0000)

しかし、テスト(2つの異なる方法による):

XCTAssert(testPerson2.createdAt == testPerson.createdAt, "createdAt should be the same")

また

XCTAssertTrue(testPerson2.createdAt!.isEqualToDate(testPerson2.createdAt!), "createdAt should be the same")

不合格

2x testPerson または testPerson2 でこれらのテストを実行すると、成功します

次のコードも試しました。

if testPerson.createdAt!.compare(testPerson.createdAt!) == NSComparisonResult.OrderedDescending
        {
            println("date1 after date2");
        } else if testPerson.createdAt!.compare(testPerson.createdAt!) ==     NSComparisonResult.OrderedAscending
        {
            println("date1 before date2");
        } else
        {
            println("dates are equal");
        }

testPerson と testPerson2 を使用すると失敗し、testPerson/testPerson と testPerson2/testPerson2 で成功します

なんで ?Println とデータベース自体の調査は問題ないようです。

4

1 に答える 1

5

内部的には、NSDate は少なくとも 1 ナノ秒の分解能を持っています。dateFormatter はss.SSSミリ秒しか処理しないため、dateFormatter はその解像度のほとんどを削除します。

ナノ秒の精度が必要ない場合は、ミリ秒レベルまでの日付のみを確認することをお勧めします。私は通常XCTAssertEqualWithAccuracy()、そのために使用します。

例えば:

XCTAssertEqualWithAccuracy(date1.timeIntervalSinceReferenceDate,
                           date2.timeIntervalSinceReferenceDate,
                           0.001, 
                           "")
于 2015-08-15T07:51:43.830 に答える