簡體   English   中英

STAssertEquals報告相等的字符串為不同的字符串

[英]STAssertEquals reports equal strings as being different

我試圖為一個庫編寫單元測試。 庫中的方法返回字符串,我想確保它返回正確的字符串。 但是,即使相同,SenTestKit中的STAssertEquals宏還是將其視為不同的值。 在此處輸入圖片說明

您可以看到描述部分清楚地顯示了兩個字符串值相同,但是此宏抱怨它們的值不同。 當我從方法返回靜態字符串時(就像return @"op_user" ),它通過了測試用例。 任何人都知道導致相同字符串值的測試失敗的原因是什么?

我認為您想使用STAssertEquals()而不是STAssertEquals() 前者用於Objective-C實例,后者用於基本類型。

文檔

STAssertEqualObjects

當兩個對象不同時,測試用例失敗。

STAssertEquals

兩個值不同時,測試用例失敗。

如果將Objective-C對象與STAssertEquals()比較,則只是在比較它們的指針值。 它們可以指向包含相同字符串的兩個不同的字符串對象。 即使它們的指針值不同,您也希望它們比較相等。

要比較實際的字符串內容,可以使用isEqual:方法,這正是STAssertEqualObjects()的作用。

這不是一個完全的答案(因為Marc已經正確回答了),但是作為一般規則,永遠不要使用STAssertEquals

它使用一種可疑的方法,該方法首先檢查參數的類型是否相等,然后使用@encode確定類型,然后基本上執行memcmp。 因此,變量定義如下

int i = 1; 
unsigned int ui = 1;
assert(i == ui);
STAssertEquals(i, ui, @"");

即使值相等,也會使STAssertEquals失敗。

signed char sc = 1;
char c = 1;
STAssertEquals(sc, c, @"");

你猜怎么了?
(提示:類型不相等!)

...將成功 ,因為@encode無法區分unsigned char和已signed char ,但這是不同的類型!

其他問題與結構中的填充有關,其中memcmp可能返回非零值,但結構值實際上會比較相等。

因此最好不要使用STAssertEquals以及它的后繼者XCTAssertEqual ,后者采用相同的荒謬方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM