我正在使用 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();
}
谁能解释为什么我会收到错误以及我可以做些什么来解决它?
userRepositoryImplementation.getUserByUsername(anyString());
这不是anyString()
的正确使用。它可用于存根或验证。但不适用于方法的实际调用。从文档:
允许灵活验证或存根。
如果你想要一个随机字符串,在测试运行时尝试使用RandomStringUtils或任何其他类似的库。
userRepositoryImplementation.getUserByUsername(RandomStringUtils.random(length));
您可以使用Matchers
,例如anyString()
来模拟(存根)对象。 即在when()
调用中。您的调用是实际调用:
//Act
userRepositoryImplementation.getUserByUsername(anyString());
所以没错:为了进行测试,您必须添加一些实际输入,例如 ""
、 "salala"
或 null
.