Java saveAndFlush()未保存到模拟回购
我正在尝试为API编写测试,这是Spring和Mockito的新功能。当我储蓄和冲销时,它似乎不会影响回购。此测试在失败时通过,因为列表中应该有1个帐户。你知道我在这里遗漏了什么吗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
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);
//测试某些东西(例如,列表由控制器处理/操纵