与 Mockito Mock 匹配的宽松字符串
Lenient string matching with Mockito Mock
我有一个测试来验证空对象的 return 如果该对象的字符串 属性 与预定值不匹配。我的密码是
import guru.springframework.sfgpetclinic.model.Speciality;
import guru.springframework.sfgpetclinic.repositories.SpecialtyRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.BDDMockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
@ExtendWith(MockitoExtension.class)
class SpecialtySDJpaServiceTest {
@Mock
SpecialtyRepository specialtyRepository;
@InjectMocks
SpecialtySDJpaService service;
@Test
void testSaveLambdaNoMatch() {
// Given
final String MATCH_ME = "MATCH_ME";
Speciality speciality = new Speciality();
speciality.setDescription("Not a match");
Speciality savedSpeciality = new Speciality();
savedSpeciality.setId(1L);
// Need mock to only return on match MATCH_ME string
given(specialtyRepository.save(argThat(argument -> argument.getDescription().equals(MATCH_ME)))).willReturn(savedSpeciality);
// When
Speciality returnedSpeciality = service.save(speciality);
// Then
assertNull(returnedSpeciality);
}
// Other tests...
}
此测试失败并显示消息
org.mockito.exceptions.misusing.PotentialStubbingProblem:
Strict stubbing argument mismatch. Please check:
- this invocation of 'save' method:
specialtyRepository.save(
guru.springframework.sfgpetclinic.model.Speciality@19ae6bb
我认为问题在于 argThat() 使用了精确匹配方案。我想通过
将模拟匹配设置为宽松
@Mock(lenient = true)
SpecialtyRepository specialtyRepository
但是Intellij不识别lenient参数。我正在使用 JUnit 5 和 Mockito 2.23.0
@Mock(lenient = true) 在 Mockito
版本 2.23.3
中引入。
你要么必须升级要么使用other way
写这个:
lenient().when(specialtyRepository.save(argThat(argument -> argument.getDescription().equals(MATCH_ME)))).willReturn(savedSpeciality);
我有一个测试来验证空对象的 return 如果该对象的字符串 属性 与预定值不匹配。我的密码是
import guru.springframework.sfgpetclinic.model.Speciality;
import guru.springframework.sfgpetclinic.repositories.SpecialtyRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.BDDMockito.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
@ExtendWith(MockitoExtension.class)
class SpecialtySDJpaServiceTest {
@Mock
SpecialtyRepository specialtyRepository;
@InjectMocks
SpecialtySDJpaService service;
@Test
void testSaveLambdaNoMatch() {
// Given
final String MATCH_ME = "MATCH_ME";
Speciality speciality = new Speciality();
speciality.setDescription("Not a match");
Speciality savedSpeciality = new Speciality();
savedSpeciality.setId(1L);
// Need mock to only return on match MATCH_ME string
given(specialtyRepository.save(argThat(argument -> argument.getDescription().equals(MATCH_ME)))).willReturn(savedSpeciality);
// When
Speciality returnedSpeciality = service.save(speciality);
// Then
assertNull(returnedSpeciality);
}
// Other tests...
}
此测试失败并显示消息
org.mockito.exceptions.misusing.PotentialStubbingProblem:
Strict stubbing argument mismatch. Please check:
- this invocation of 'save' method:
specialtyRepository.save(
guru.springframework.sfgpetclinic.model.Speciality@19ae6bb
我认为问题在于 argThat() 使用了精确匹配方案。我想通过
将模拟匹配设置为宽松@Mock(lenient = true)
SpecialtyRepository specialtyRepository
但是Intellij不识别lenient参数。我正在使用 JUnit 5 和 Mockito 2.23.0
@Mock(lenient = true) 在 Mockito
版本 2.23.3
中引入。
你要么必须升级要么使用other way
写这个:
lenient().when(specialtyRepository.save(argThat(argument -> argument.getDescription().equals(MATCH_ME)))).willReturn(savedSpeciality);