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

时间:2016-05-24 08:29:23

标签: java eclipse mockito

我正在使用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();

}

任何人都可以解释为什么我收到错误以及我可以做些什么来解决它?

2 个答案:

答案 0 :(得分:1)

您可以使用Matchers,例如anyString()来模拟(存根)对象。即在when()调用内。您的调用是实际调用:

//Act
userRepositoryImplementation.getUserByUsername(anyString());

这是正确的:对于测试,您必须添加一些实际输入,例如"""salala"null

答案 1 :(得分:1)

userRepositoryImplementation.getUserByUsername(anyString());

这不是anyString()的正确用法。 它可用于存根或验证。但不是实际的方法调用。 来自documentation

  

允许灵活的验证或存根。

如果您想在测试运行时使用随机字符串,请尝试使用RandomStringUtils或任何其他类似的库。

userRepositoryImplementation.getUserByUsername(RandomStringUtils.random(length));