2015-04-27 14 views
9

Tôi muốn làm điều này:Mockito Matchers.any (...) trên một đối số chỉ

verify(function, Mockito.times(1)).doSomething(argument1, Matchers.any(Argument2.class)); 

đâu argument1 là một trường hợp specfic loại Argument1argument2 là bất kỳ thể hiện của loại Argument2.

Nhưng tôi nhận được một lỗi:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 2 matchers expected, 1 recorded. This exception may occur if matchers are combined with raw values: 
    //incorrect: 
    someMethod(anyObject(), "raw String"); When using matchers, all arguments have to be provided by matchers. For example: 
    //correct: 
    someMethod(anyObject(), eq("String by matcher")); 

Sau lời khuyên mà tôi có thể viết như sau và mọi thứ đều tốt:

verify(function, Mockito.times(1)).doSomething(Matchers.any(Argument1.class), Matchers.any(Argument2.class)); 

Nơi tôi đang tìm kiếm bất kỳ đối số kiểu Argument1 và bất kỳ đối số nào của loại Argument2.

Làm cách nào để đạt được hành vi mong muốn này?

Trả lời

13

Có nhiều đối sánh đối số có thể có và một là eq, được đề cập trong thông báo ngoại lệ. Sử dụng:

verify(function, times(1)).doSomething(eq(arg1), any(Argument2.class)); 

(nhập tĩnh phải có ở đó - eq()Matchers.eq()).

Bạn cũng có same() (có tham chiếu bình đẳng, nghĩa là ==) và thông thường bạn có thể viết đối sánh của riêng mình.

+0

Nhìn chằm chằm vào mặt tôi, giúp tôi không dành thời gian để đọc! Cảm ơn vì điều đó. –

Các vấn đề liên quan