Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java saveAndFlush()未保存到模拟回购_Java_Spring_Spring Boot_Unit Testing_Mockito - Fatal编程技术网

Java saveAndFlush()未保存到模拟回购

Java saveAndFlush()未保存到模拟回购,java,spring,spring-boot,unit-testing,mockito,Java,Spring,Spring Boot,Unit Testing,Mockito,我正在尝试为API编写测试,这是Spring和Mockito的新功能。当我储蓄和冲销时,它似乎不会影响回购。此测试在失败时通过,因为列表中应该有1个帐户。你知道我在这里遗漏了什么吗 public class AccountTest { @InjectMocks private AccountController underTest; @Mock private AccountRepository repo; private Account account

我正在尝试为API编写测试,这是Spring和Mockito的新功能。当我储蓄和冲销时,它似乎不会影响回购。此测试在失败时通过,因为列表中应该有1个帐户。你知道我在这里遗漏了什么吗

public class AccountTest {
    @InjectMocks
    private AccountController underTest;
    @Mock
    private AccountRepository repo;
    private Account account = new Account();

    @BeforeEach
    void setUp() throws Exception{
        MockitoAnnotations.initMocks(this);
       account.setAccountNumber((long) 6666);
        account.setName("Steph");
        repo.saveAndFlush(account);
    }

      @Test
      void list(){
        List<Account> mockList = repo.findAll();
        when(underTest.list()).thenReturn(mockList);
        assert mockList != null;
        assertEquals(0, mockList.size());
    }
}
公共类AccountTest{
@注射模拟
私人账户控制人测试不足;
@嘲弄
私人账户回购;
私人账户=新账户();
@之前
void setUp()引发异常{
initMocks(this);
account.setAccountNumber((长)6666);
账户名称(“Steph”);
回购、储蓄和冲销(账户);
}
@试验
作废清单(){
List mockList=repo.findAll();
当(underTest.list())。然后返回(mockList);
断言模拟列表!=null;
assertEquals(0,mockList.size());
}
}

在这种情况下没有存储库:Mock是一个假装是真实存储库但不提供任何功能的对象。 Mockito保证调用mock(就像调用真实的存储库一样),但所有方法都不做任何事情(函数返回null或空列表,每个void方法都不做任何事情)

在您的示例中,findAll()正确地返回一个空列表

其思想是配置您的mock来模拟某些行为

# return a given object when the findById() method (any param) is called
when(repo.findById(isA(Long.class))).thenReturn(new Account());
并验证其行为是否符合预期

# verify save() method is called once
verify(repo, times(1)).save(isA(Account.class));
在您的特定示例中,如果您的测试需要一个非空的列表,您可以模拟findAll()

# return a list with one element
List<Account> list = Collections.singletonList(new Account())
when(repo.findAll().thenReturn(list);

// test something (for example the list is processed/manipulated by the controller
#返回包含一个元素的列表
List List=Collections.singletonList(新帐户())
when(repo.findAll().thenReturn(list);
//测试某些东西(例如,列表由控制器处理/操纵