我正在使用eclipse在一个类上运行一些单元测试而我正在使用Mockito所以我不必连接到数据库。我在其他测试中使用了anyString(),但是它在这个测试中没有用。如果我将它从anyString()更改为""错误消失,测试通过。
我的测试是:
@Test
public void test_GetUserByUsername_CallsCreateEntityManager_WhenAddUserMethodIsCalled() {
//Arrange
EntityManagerFactory mockEntityManagerFactory = mock(EntityManagerFactory.class);
EntityManager mockEntityManager= mock(EntityManager.class);
UserRepositoryImplementation userRepositoryImplementation = new UserRepositoryImplementation();
userRepositoryImplementation.setEntityManagerFactory(mockEntityManagerFactory);
when(mockEntityManagerFactory.createEntityManager()).thenReturn(mockEntityManager);
//Act
userRepositoryImplementation.getUserByUsername(anyString());
//Assert
verify(mockEntityManagerFactory, times(1)).createEntityManager();
}
任何人都可以解释为什么我收到错误以及我可以做些什么来解决它?
答案 0 :(得分:1)
您可以使用Matchers
,例如anyString()
来模拟(存根)对象。即在when()
调用内。您的调用是实际调用:
//Act
userRepositoryImplementation.getUserByUsername(anyString());
这是正确的:对于测试,您必须添加一些实际输入,例如""
,"salala"
或null
。
答案 1 :(得分:1)
userRepositoryImplementation.getUserByUsername(anyString());
这不是anyString()
的正确用法。
它可用于存根或验证。但不是实际的方法调用。
来自documentation:
允许灵活的验证或存根。
如果您想在测试运行时使用随机字符串,请尝试使用RandomStringUtils或任何其他类似的库。
userRepositoryImplementation.getUserByUsername(RandomStringUtils.random(length));