在 Mockito.when 中多次使用相同的 ArgumentMatchers

彼得·桑特森

我最近一直在学习测试,但这是第一个测试,因为我必须在我模拟的函数中传递一个变量。我写了一个类似的测试,唯一的区别是我在这个测试中使用了一个 ArgumentMatcher,因为 testInput.validate() 需要 3 个字符串来传递它。我不太了解这些东西,所以如果术语被关闭,我很抱歉。

这是我要测试的代码:

@Component
public class RequestHandler {

private static Gson gson = new Gson();
private final UserRepository userRepository;
private final TestInput testInput;

@Autowired
public RequestHandler(UserRepository userRepository, TestInput testInput) {
    this.userRepository = UserRepository;
    this.testInput = testInput;
}

public String addUser(String username, String email, String password) {
    if (testInput.validate(username, email, password) && !(userRepository.findById(email).isPresent())) {
        User user = new User(username, email, password);
        userRepository.save(user);
        return gson.toJson(user);
    } else {
        return gson.toJson("error");
    }
  }
}

这是我的测试:

public class RequestHandlerTest {
    UserRepository userRepository = Mockito.mock(UserRepository.class);
    TestInput testInput = Mockito.mock(TestInput.class);

    RequestHandler requestHandler = new RequestHandler(userRepository, testInput);

    String test = ArgumentMatchers.anyString();

    @Test
    public void addUserTest() {
        Mockito.when(testInput.validate(test, test, test)).thenReturn(true, false); 

        Mockito.when(userRepository.findById(test).isPresent()).thenReturn(false, true);

        String jsonUser = new Gson().toJson(new User("username123","[email protected]","12344321"));
        String jsonError = new Gson().toJson("error");

        System.out.println("addUser Test1");
        assertEquals(jsonUser, requestHandler.addUser("username123","[email protected]","12344321"));

        System.out.println("addUser Test2");
        assertEquals(jsonError, requestHandler.addUser("username123","[email protected]","12344321"));
    }
}

这段代码有一堆错误,当我将 ArgumentMatchers.anyString() 更改为 ArgumentMatchers.any() 时,我有 1 个错误,而不是 5 个。

原因

我查看了这个问题的源代码,为了给其他读者提供信息,潜在的问题是模拟函数被声明为“静态”。这从发布的问题中并不明显。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章