You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java项目中Mockito与JUnit测试阻塞问题求助

Mockito与JUnit测试阻塞问题求助

我在测试一个接收用户输入的方法时遇到问题:用硬编码的String id = "E833462"时,registerAccountTest()能正常运行,但换成自定义ID生成函数后,测试会卡在when(mockScanner.nextLine()).thenReturn(id, name, bd, role, sex, password);这一行。两种方式得到的都是ID字符串,且单独测试过生成函数能创建随机唯一ID,不清楚阻塞原因,希望有人帮忙解决。

测试方法代码

@Test
void registerAccountTest() {
    Employee em = employees.searchById("E160052");

//        String id = "E833462";
    String id = Inputter.generateUniqueId("E", 6, employees);
    String name = "Test";
    String role = "MA";
    String sex = "Male";
    String bd = "08/03/2000";
    String password = "123456";

    String combinedUserInput =
            id + System.lineSeparator() + name + System.lineSeparator() + role + System.lineSeparator() + sex + System.lineSeparator() + bd + System.lineSeparator() + password;
    System.out.println(combinedUserInput);
    InputStream inputStream = new ByteArrayInputStream(combinedUserInput.getBytes());
    System.setIn(inputStream);

    Scanner mockScanner = spy(Inputter.scanner);
    System.out.println("Before when statement");
    when(mockScanner.nextLine()).thenReturn(id, name, bd, role, sex, password);
    System.out.println("After when statement");

    Executor.registerAccount(employees, em);

    Employee emTest = employees.searchById(id);
    assertNotEquals(null, emTest);
    assertEquals(name, emTest.getName());
    assertEquals(bd, emTest.getBirthdate().format(Inputter.formatterHalf));
    assertEquals(role, emTest.getRole());
    assertEquals(sex, emTest.getSex());

    employees.deleteOne(emTest);
}

Inputter类的ID生成函数

public class Inputter {
    public static Scanner scanner = new Scanner(System.in);
    public static String generateUniqueId(String prefix, int len, ObjectList ol) {
        String id;

        do {
            int num = (int) random.nextDouble(Math.pow(10, len));
            id = prefix + String.format("%03d", num);
        } while (!Objects.isNull(ol.searchById(id)));

        return id.trim();
    }
}

内容的提问来源于stack exchange,提问作者twentyfourk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:21:20