Mockito.any () генерикамен интерфейсті өткізеді

интерфейстің типін генериктермен беру мүмкін бе?

Интерфейс:

public interface AsyncCallback

Менің сынақ әдісімде:

Mockito.any(AsyncCallback.class)

Putting behind or for .class didnt work.

106

6 жауаптар

Түрі қауіпсіз әдісі бар: ArgumentMatchers.any() қолданыңыз және оны келесі түрге сәйкестендіріңіз:

ArgumentMatchers.>any()

Пиерефревер ретінде ескертулерде айтылғандай, Mockito жаңа нұсқалары бар

Matchers.>any()
205
қосылды
Бұл шынында да қауіпсіз емес, өйткені нақты әдіс тек қана дұрыс терілген дәлелмен шақырылуы мүмкін. Мұндай түрдегі нәтиже жоқ java8-ге дейін компиляторды қанағаттандыру қажет болды.
қосылды автор herman, көзі
ResponseEntity >> responseEntity = Matchers. >>> кез келген (); Және ол әрдайым нөлді қайтарады
қосылды автор Arun, көзі
Мен бұл жауапты растаймын және ескертуді дұрыс басады.
қосылды автор kevinarpe, көзі
Matchers іс жүзінде ескірген, бірақ ArgumentMatchers жұмыс істеді.
қосылды автор guijob, көзі
Біріншіден, ArgumentMatchers пайдаланып, мен үшін жұмыс істеді, ал екіншісі - Matchers қолданылмайды. Мен ResponseX деген нәрсеге немқұрайды қарадым. бірақ мен жауап алдым, менің жағдайымда мына сияқты жазды: ArgumentMatchers. <�Спецификация > any ()
қосылды автор Barani r, көзі
Mockito жаңа нұсқалары: (Matchers. кез келген()
қосылды автор pierrefevrier, көзі

Using Java 8, you can simply use any() (assuming static import) without argument or type parameter because of enhanced type inference. The compiler now knows from the target type (the type of the method argument) that you actually mean Matchers.>any(), which is the pre-Java 8 solution.

47
қосылды
@MatthewRead Аргумент түрі 'AsyncCallback ' болса, AsyncCallback дегенді қолдану керек емес.
қосылды автор herman, көзі
@MatthewRead Жоюдың арқасында нақты түрді іске қосу уақытында Mockito арқылы тексеруге болмайды. Сондықтан сіз тіпті isA() пайдалана алмайсыз. Егер нысан нысанға сәйкес келетін Class нысанын ұстайтын болса және интерфейс оны көрсетсе, менің ойымша, оны реттелетін сәйкестікте тексере аласыз. Немесе Collection жағдайда, мысалы, элементтердің түрін тексере аласыз.
қосылды автор herman, көзі
Mockito v2 ішіндегі Matchers ауыстырылды ArgumentMatchers
қосылды автор bheussler, көзі
AsyncCallback дегенге сәйкес any() емес пе?
қосылды автор Matthew Read, көзі
Мен аргумент түрінің де жалпы сипаты бар жағдайды ойлаймын, бірақ сіз оны нақты бір түрге келтіргіңіз келеді (немесе оны әртүрлі жолдарда бірнеше түрлерге қоятын). Мысалы, егер y - бұл public T y (AsyncCallback кезде (xy (any ())), thenAnswer (...) > arg) . Мүмкін болса, жауаптың түрін тексерген жөн болар.
қосылды автор Matthew Read, көзі
Тері, сіз дұрыссыз. Мен шын мәнінде типті өшіру туралы көп нәрсе оқып жүрдім және оны қандай да бір себеппен байланыстырмадым. Түсіндіргеніңіз үшін рақмет!
қосылды автор Matthew Read, көзі

Мен генериктерге рұқсат беру үшін келесі мехамизмді қабылдауға тура келді:

import static org.mockito.Matchers.any;
List list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);

Бұл біреуге көмектеседі деген үміттемін.

11
қосылды
Менің жауапымды қараңыз: бұл Java 8-пен қажет емес.
қосылды автор herman, көзі

Пиереффайерлік түсініктеме түсініктемелердің орнына жауапта болса, пайдалы болуы мүмкін жауап ретінде жіберу.

With new versions of Mockito: (Matchers.>any()

3
қосылды
мен оның түпнұсқалық жауапына қосылдым
қосылды автор Joerg, көзі

Сіз оны тек қана шығарсаңыз, қаласаңыз, алдын-алу ескертулерін қосасыз:

@SuppressWarnings("unchecked")    
AsyncCallback callback = Mockito.any(AsyncCallback.class)

Егер Java «генерик» генериктеріне рұқсат берсе, онда сіз іздеген нәрсеге ұқсас әдіс болуы мүмкін

private static  T mock(Class> clazz)
1
қосылды
Егер @SuppressWarnings @SuppressWarnings дегенді қолданудың жақсы идеясы болмаса, егер сіз оны жеке айнымалыға тағайындағыңыз келсе, any() жауап. Енді java 8-де, кез келген() бөлек тағайындауды қажет етпестен инлайнда пайдалануға болады.
қосылды автор herman, көзі
Мен мұны істеген кезде тестімде қате пайда болды: Сіз дәлел сәйкестендіргіштерін растаудан немесе штамптаудан тыс пайдалана алмайсыз.
қосылды автор kevinarpe, көзі
@kevinarpe, егер сізде бірнеше аргумент сәйкестері бар болса, олар Java тілінде көрсетілгендей оларды шақырылуы керек.
қосылды автор TWiStErRob, көзі

ThSoft-тың жауаптарына кез келген() әдісіне білікті қоңырау шалып, қосымша біліктілікті алып тастауға болатынымды білдіргендіктен, қайтару түрі рұқсат етілген:

private HashMap anyStringStringHashMap() {
    return Matchers.any();
}
0
қосылды