Spring boot SpringJPA能够使用存储库中的任何匹配器

Spring boot SpringJPA能够使用存储库中的任何匹配器,spring-boot,mockito,junit5,Spring Boot,Mockito,Junit5,所以我试着测试我的服务层,我模拟了我的存储库,我想做的是 @ExtendWith(MockitoExtension.class) public class TicketServiceTest { @Mock private TicketRepository ticketRepository; @InjectMocks private TicketService ticketService; @Test public void test_buy

所以我试着测试我的服务层,我模拟了我的存储库,我想做的是

@ExtendWith(MockitoExtension.class)
public class TicketServiceTest {

    @Mock
    private TicketRepository ticketRepository;

    @InjectMocks
    private TicketService ticketService;

    @Test
    public void test_buy_ticket_successfully() {
        Ticket ticket = new Ticket(1, false, false, "");
        List<Ticket> availableTickets = Arrays.asList(ticket);

        Mockito.when(ticketRepository.findAllUnboughtAndUnpickedTickets()).thenReturn(availableTickets);
        Mockito.when(ticketRepo.findById(any(Integer.class)).thenReturn(Optional.of(any(Ticket.class));

        Ticket boughtTicket = ticketService.buyTicket("123");

        assertNotNull(boughtTicket);
        assertEquals(1, boughtTicket.getId());

        Mockito.verify(ticketRepository).findAllUnboughtAndUnpickedTickets();

    }
@ExtendWith(MockitoExtension.class)
公共类票务测试{
@嘲弄
私人票务;
@注射模拟
私人票务票务服务;
@试验
公共无效测试\u购买\u票证\u成功(){
票证=新票证(1,假,假,“”);
List availableTickets=Arrays.asList(票证);
Mockito.when(ticketposition.findallunboughtandunpickedttickets()),然后返回(availableTickets);
Mockito.when(ticketRepo.findById(any(Integer.class)).thenReturn(any(Ticket.class))的可选.of;
Ticket boughtTicket=票务服务。购买票证(“123”);
assertNotNull(boughtTicket);
assertEquals(1,boughtTicket.getId());
Mockito.verify(ticketRepository.findAllUnboughtAndUnpickedTickets();
}
我得到的错误是:

Type mismatch: cannot convert from Matcher<Integer> to Integer
类型不匹配:无法从匹配器转换为整数
我只想在输入和输出中使用任何匹配器,但这不起作用,因为我的repoistory如下所示:

public interface TickRep extends JpaRepository<Ticket, Integer>
public接口TickRep扩展了JpaRepository
我正在使用SpringBoot,JUnit5


有什么想法吗?

线路设置期望值有问题:

thenReturn(可选)(任意(票证类别));

你得到的错误

Type mismatch: cannot convert from Matcher<Integer> to Integer
类型不匹配:无法从匹配器转换为整数
建议您使用的是Hamcrest匹配器,而不是Mockito匹配器

  • Mockito
    any()
    返回
    T
  • Hamcrest
    any()
    返回
    Matcher
第二个问题:即使是Mockito匹配器也不能在返回值的上下文中使用

见:

Matcher方法不能用作返回值;例如,在Mockito中,无法使用短语
thenReturn(anyInt())
thenReturn(any(Foo.class))
。Mockito需要确切知道在存根调用中返回哪个实例,并且不会为您选择任意返回值


将您的Junit类与依赖项一起共享,您得到了哪些异常?@dassum更新了注释