亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Mockito 中存根 varargs 以僅匹配一個參數

如何在 Mockito 中存根 varargs 以僅匹配一個參數

叮當貓咪 2022-08-17 10:33:40
我想存根一些代碼,以便當其中一個參數與特定值匹配時,vararg方法返回true。例如,給定我無法更改的現有代碼:(在這里使用Kotlin,但我認為這適用于任何Java情況。class Foo {    fun bar(vararg strings : String) : Boolean {        // Iterates `strings` and returns true when one satisfies some criteria    }}...我想編寫類似于以下內容的存根代碼:val foo = Foo()whenever(foo.bar(eq("AAA"))).thenReturn(true)當調用完全為 時,這可以正常工作。foo.bar("AAA")但是,有時被測代碼會進行調用,在這些情況下,它會失敗。foo.bar("AAA", "BBB")如何修改我的存根代碼,以便在調用中傳遞任意數量的 vararg 時正常工作?編輯標記為可能的副本;在這種情況下,該場景考慮了調用中varargs的完全省略。在這里,我試圖匹配varargs數組的一個特定元素。
查看完整描述

2 回答

?
DIEA

TA貢獻1820條經驗 獲得超2個贊

您可以創建自己的:matcher


public class MyVarargMatcher extends ArgumentMatcher<String[]> implements VarargMatcher

{

    private String expectedFirstValue;


    public MyVarargMatcher(String expectedFirstValue)

    {

        this.expectedFirstValue = expectedFirstValue;

    }


    @Override

    public boolean matches(Object varargArgument) {

        if (varargArgument instanceof String[])

        {

            String[] args = (String[]) varargArgument;

            return Stream.of(args).anyMatch(expectedFirstValue::equals);

        }

        return false;

    }

}

然后像這樣使用它(Java代碼):


Foo foo = Mockito.mock(Foo.class);

Mockito.doReturn(true).when(foo).bar(Mockito.argThat(new MyVarargMatcher("AAA")));

編輯了op的評論:只要“AAA”是參數之一,它應該返回true


查看完整回答
反對 回復 2022-08-17
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您必須將方法存根2次。首先是最不具體的存根:


val foo = Foo()

whenever(foo.bar(any())).thenReturn(false) // or whatever you want to return/throw here

然后是更具體的單參數方法:


whenever(foo.bar(eq("AAA"))).thenReturn(true)

在你的評論之后,你也可以使用這樣的東西(這次使用Java):


when(foo.bar(any())).thenAnswer(invocation -> {

    for (Object argument : invocation.getArguments()) {

        if ("AAA".equals(argument)) return true;

    }

    return false;

});

在 Kotlin 中也是如此


whenever(foo.bar(any()).thenAnswer {

    it.arguments.contains("AAA")

}


查看完整回答
反對 回復 2022-08-17
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號