簡體   English   中英

“無效使用參數匹配器”但我只使用匹配器

[英]“Invalid use of argument matchers” but I use matchers only

我收到錯誤消息:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:參數匹配器的使用無效! 預期的0匹配器,1記錄: - > at * .SegmentExportingTest.happyDay(SegmentExportingTest.java:37)如果匹配器與原始值組合,則可能發生此異常://錯誤:someMethod(anyObject(),“raw String”); 使用匹配器時,所有參數都必須由匹配器提供。 例如:// correct:someMethod(anyObject(),eq(“by matcher”));

但實際上我只在方法的參數中使用匹配器。

下一個代碼是上述錯誤的來源。

ConfigReader configReader = mock(ConfigReader.class);
    when(configReader.getSparkConfig())
            .thenReturn(new SparkConf().setMaster("local[2]").setAppName("app"));
    when(configReader.getHBaseConfiguration()).thenReturn(new Configuration());

    SparkProfilesReader sparkProfilesReader = mock(SparkProfilesReader.class);
    ProfileSegmentExporter profileSegmentExporter = mock(ProfileSegmentExporter.class);

    //--
    new SegmentExporting().process(configReader, sparkProfilesReader, profileSegmentExporter);
    //--

    InOrder inOrder = inOrder(sparkProfilesReader, profileSegmentExporter);
    inOrder.verify(sparkProfilesReader).readProfiles(any(JavaSparkContext.class),
            refEq(configReader.getHBaseConfiguration()));

在評論中解決:

我在單獨的行中解壓縮了configReader.getHBaseConfiguration()並隱藏了該問題。

您的具體問題是您在設置匹配器時調用了模擬方法


指出問題的兩條線是:

when(configReader.getHBaseConfiguration()).thenReturn(new Configuration());
// ...
inOrder.verify(sparkProfilesReader).readProfiles(any(JavaSparkContext.class),
    refEq(configReader.getHBaseConfiguration()));

正如我在之前的SO帖子中所寫,Mockito匹配器主要通過副作用工作,因此Matcher方法和模擬對象方法之間的調用順序對Mockito及其驗證很重要。 configReader.getHBaseConfiguration()的調用是對調用any(JavaSparkContext.class)之后發生的模擬(在第一行中建立)的調用,這會讓Mockito認為你正在驗證零arg方法getHBaseConfiguration any匹配的一個參數。 這就是錯誤消息“0匹配預期,1記錄”的原因:0表示getHBaseConfiguration ,1表示any(JavaSparkContext.class)

為了安全起見,在使用Mockito匹配器時,請確保傳遞給匹配器的值都是預先計算的:它們都應該是常量文字,簡單的數學表達式或變量。 在存根/驗證開始之前,任何涉及方法調用的東西都應該被提取到局部變量。

暫無
暫無

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

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