Идея кода, который я пишу,
public Class MyClass() {
private PrimaryClass primaryClass;
private CustomClass1 customeClass1;
private CustomClass2 customeClass2;
public void execute() {
Type1 obj1 = primaryClass.doSomething(() -> customeClass1.doSomethingElse1())
Type2 obj2 = primaryClass.doSomething(() -> customeClass2.doSomethingsElse2())
}
Я пытаюсь написать модульные тесты для этого, но я не могу смоделировать эти два разных вызова, возвращая разные вызовы, идентифицируя разные типы аргументов. Как вы можете видеть в приведенном выше коде, я передаю поставщиков в качестве аргумента, и каждый из них возвращает различный тип, основываясь на том, что я понял из этого поста , я пытался сделать это,
@Mock private PrimaryClass primaryClass;
@Mock private CustomClass1 customeClass1;
@Mock private CustomClass2 customeClass2;
@InjectMock private MyClass myClass;
@Test
public test() {
when(primaryClass.doSomething(ArgumentMatchers.<Supplier<Type1>>any())).thenReturn(ObjectofType1);
when(primaryClass.doSomething(ArgumentMatchers.<Supplier<Type2>>any())).thenReturn(ObjectofType2);
myClass.execute();
}
То, что происходит выше, таково: второй сопоставитель совпадает с ними обоими, и я получаю ошибку, так как Type2 не может быть приведен как объект Type1.
Я также пытался реализовать что-то вроде того, что не сработало
@Mock private primaryClass primaryClass;
@Mock private CustomClass1 customeClass1;
@Mock private CustomClass2 customeClass2;
@InjectMock private MyClass myClass;
@Test
public test() {
when(primaryClass.doSomething(ArgumentMatchers.argThat(new Typ1Matcher)).thenReturn(ObjectofType1);
when(primaryClass.doSomething(ArgumentMatchers.argThat(new Type2Matcher)).thenReturn(ObjectofType2);
myClass.execute();
}
private class Type1Matcher implements ArgumentMatcher<Supplier<Type1>> {
public matcher(Supplier<Type1> supplier) {
if(supplier != null) {
return supplier.get() instanceOf Type1
}
return false;
}
}
private class Type2Matcher implements ArgumentMatcher<Supplier<Type2>> {
public matcher(Supplier<Type2> supplier) {
if(supplier != null) {
return supplier.get() instanceOf Type2
}
return false;
}
}
Я не понимаю, как ArgumentMatcher соответствует аргументам, когда дело доходит до поставщиков. Если кто-то понимает, если я делаю что-то не так для использования, пожалуйста, помогите мне.