mockito 中的 anyString() 抛出对参数匹配器的无效使用



我正在使用 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 .

相关内容

  • 没有找到相关文章

最新更新