如何将值传递给没有参数的方法?

问题描述 投票:0回答:1

我有这个方法:

  public User authenticateUser() {
      Scanner scr = new Scannery(System.in);
      String name = scr.nextLine();
      String password = scr.nextLine();
      return new User(name, password);
  }

我想知道我是否可以对其进行单元测试,如果它确实创建了用户。然而它没有任何参数。

我尝试了以下方法:

@Test
public void testIfReadCredentialsReturnUser() {
    User user = mock(User.class);
    ConsoleView view = new ConsoleView();
    view.readCredentials().setEmail("asd.com");
    view.readCredentials().setPassword("asd");
    assertNotNull(view.readCredentials());
}

然而,这实际上让我通过扫描仪传递参数,这显然是我在测试中无法做到的。

还尝试了其他逻辑。我也尝试过使用

when()
thenReturn()
thenAnswer()
,但我找不到解决这个问题的方法,因为我对模拟还很陌生。

有人可以与我分享一些想法吗?

java unit-testing mockito
1个回答
1
投票

您可以执行以下操作:

String data = "TestName\nTestPW\n";
InputStream testInput = new ByteArrayInputStream(data.getBytes() );
InputStream old = System.in;
System.setIn(testInput);
user = authenticateUser();
System.setIn(old);
© www.soinside.com 2019 - 2024. All rights reserved.