2016-11-07 69 views
-4

使用Java,我有一個方法:方法返回布爾形式XOR

boolean shouldPointBeAdded(boolean excludePoint, shapeContainsPoint){ 
    return excludePoint^shapeContainsPoint; 
} 

用作:

if(shouldPointBeAdded(excludePoint, shape.contains(point)) 

這被用作if條件,但它不執行相同的方式就好像我是直接做XOR一樣的if條件。

注意:我已將XOR包裝在測試和可讀性的方法中。

運行單元測試用例時,assert在使用方法shouldPointBeAdded()時不會返回正確的值,但是當直接在if條件中使用XOR時,它們會返回正確的值。

想法??

謝謝。

更新: 使shouldPointBeAdded()static解決感知問題,所以我認爲問題在於模擬測試對象。

+2

這是如何編譯的? 'shapeContainsPoint'之前需要'boolean'。 –

+2

您的代碼無法使用。除此之外,你不使用正文中的方法參數。 –

+1

我用你的方法(糾正其他人已經注意到的錯誤),並進行了成功的測試。請更正您的代碼,如果仍然失敗,請向我們展示您的單元測試。 –

回答

0

模擬\間諜對象被錯誤地設置。 它沒有在正確的時間和不正確的對象的行爲初始化;這是我從我所觀察到的信仰中相信的。

所以,它是:

when(spy.shouldPointBeAdded(excludePoints, shape.contains(mock(Point.class)))).thenCallRealMethod(); 

我將其更改爲:

when(spy.shouldPointBeAdded(excludePoints, shape.contains(point)).thenCallRealMethod(); 

exlcludePoints和形狀是真正的對象,而不是嘲笑,被傳遞到一個設置方法,並點一個測試類成員變量。 點在使用前根據需要進行分配。

for(Point pointInGrid : buildTenByTenGrid()) { 
      point = pointInGrid; 
      if(objectUnderTest.shouldPointBeAdded(excludePoints, shape.contains(point))) { 
       pointsInShape.add(point); 
      } 
     } 

測試現在按預期工作。