当前位置: 首页 > 知识库问答 >
问题:

宽松字符串与Mockito Mock匹配

燕文昌
2023-03-14

如果null对象的string属性与预先确定的值不匹配,我有一个测试来验证该对象的返回。我的代码是

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
@Mock(lenient = true)
SpecialtyRepository specialtyRepository 

共有1个答案

柏正平
2023-03-14

@mock(lenient=true)是在mockito版本2.23.3中引入的。

您必须升级或使用其他方式来编写以下内容:

lenient().when(specialtyRepository.save(argThat(argument -> argument.getDescription().equals(MATCH_ME)))).willReturn(savedSpeciality);
 类似资料:
  • 问题 你想要匹配两个或多个字符串。 解决方案 计算把一个字符串转换成另一个字符串所需的编辑距离或操作数。 levenshtein = (str1, str2) -> l1 = str1.length l2 = str2.length prevDist = [0..l2] nextDist = [0..l2] for i in [1..l1] by 1

  • 我想解析一个字符串,看看它是匹配整个字符串还是子字符串。我试过这个: 但我的问题是:

  • #include <stdio.h> #include <wchar.h> int main(void) { char str1[] = "abcd"; wchar_t str2[] = L"abcd"; return 0; } 技巧 用gdb调试程序时,可以使用“x/s”命令打印ASCII字符串。以上面程序为例: Temporary brea

  • 简介 我只介绍了表和数,因为它们在Scheme中最为常用。然而,Scheme也有像字符(Character)、字符串(String)、符号(Symbol)、向量(Vector)等的其它数据类型,我将在11到14章节中介绍它们。 字符 在某个字符前添加#\来表明该物是一个字符。例如,#\a表示字符a。字符#\Space、#\Tab、#\Linefeed和#\Return分别代表空格(Space)、制

  • 如何检查字符串是否与此模式匹配? 大写字母,数字,大写字母,数字。。。 例如,这些将匹配: 这些不会(“^”表示问题)