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
相关产品推荐
相关产品推荐

