2016-07-11 1 views
0

Spockインタラクションのオーダーに関係なく、リスト上で一致させることは可能ですか?例えばSpockインタラクションのオーダーに依存しないコレクションコンテンツの一致

、私は次のような方法がある場合:

public void execute(List<User> users) 
{ 
    List<User> admins = users.stream().filter(User::isAdmin).collect(); 
    worker.initAdmins(admins); 
} 

をそして私はworker.initAdminsは次のように私は期待してユーザーと呼ばれていることをテストしたいと思います:

def test() 
{ 
    setup: 
    // initialize a list of Users, some admin some not 
    Collections.shuffle(users) 
    when: 
    task.execute(users) 
    then: 
    1 * worker.initAdmins(expectedAdminList) 
} 

問題私はListの順序を保証する方法がないので、私の対話が一致していないということです。これは回避できますか?

答えて

0

私は最終的に実用的な解決策を見つけました。他の誰のために、それは将来的に役立つことがあります。

1 * worker.initAdmins({[it.containsAll(expectedAdminList)] && it.size() == expectedSize})

+1

大丈夫ですが、十分ではありません。サイズも確認してください。 – Opal

+0

@Opal間違いなく良い提案、私は答えを更新しました。ありがとう! –

1

を代わりに使用すると、メソッド呼び出しの期待にSetにキャストできます。

1 * worker.initAdmins(expectedAdminList as Set) 

注、これはあなたの着信には重複が存在しないと仮定し信頼できるリスト

関連する問題