簡體   English   中英

如何在java中測試子列表的相等性,Mockito

[英]How to test equality for a sublist in java, Mockito

我有一個集合作為參數的方法:

call(Collection<String> strings);

我調用的方法如下:

myClass.call(list.sublist(1,n));

當我運行代碼時,一切都運行得很好。 但是,在使用Mockito進行測試時,我正在使用代碼段對其進行測試:

verify(myClass,times(1)).call(myList);

它反復拋出以下錯誤:

無法評估表達式拋出'java.util.ConcurrentModificationException'異常。

我猜這是因為它無法進行測試。 任何可以幫助的解決方法? 我想知道myList是否包含與傳遞的元素相同的元素。

使用@Captor並將Hamcrest添加到您的項目中並執行此操作...

import org.hamcrest.Matchers.containsInAnyOrder;

@RunWith(MockitoJUnitRunner.class)
public class MyTest
{
    MyClass myClass = new MyClass();

    @Captor private ArgumentCaptor<Collection<String>> collectionCaptor;

    @Test
    public void someTest() throws Exception
    {
        Collection<String> expectedCollection = Arrays.asList("a", "b", "c"); 

        // setup goes here
        // execute test

        Mockito.verify(myClass).call(collectionCaptor.capture());
        Collection<String> whatWasCaptured = collectionCaptor.getValue();
        assertThat(whatWasCaptured, Matchers.containsInAnyOrder(expectedCollection));
    }
}

還要確保您的集合不會在其他線程中發生變化。 如果您無法控制其他線程正在做什么,那么您應該進行防御性編碼並返回return Collections.unmodifiableList(myList)或將您的數據結構切換為支持Guava庫等不可 return Collections.unmodifiableList(myList)的數據結構

我得到了答案。 實際上,在整個函數運行后調用verify方法。

因此,即使myClass在調用時具有正確的子列表作為參數,當稍后修改列表時,子列表也會變為無效。

調用整個方法后調用Verify方法,因此驗證時要測試的子列表無效。

因此它拋出了這個例外。

暫無
暫無

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

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