我正在写Junit来更新菜单列表项中的菜单项。在此过程中,它将检查菜单项列表中的每个菜单项名称,以查找是否有与changeItem相等的内容。如果它等于,那么为MenuItem Object设置新值。但是,我不知道如何为这个服务编写单元测试。
我的代码:
@Override
public void updateMenu(DailyMenu dailyMenu) {
try {
menuPrinter.printMenu(dailyMenu);
System.out.print("Insert menu item want to update:");
String changeItem = scanner.nextLine();
dailyMenu.getMenuItemList().forEach((MenuItem menuItem)->{
if(menuItem.getNames().equals(changeItem)){
System.out.print("nInsert name: ");
menuItem.setNames(scanner.nextLine());
System.out.print("Insert description: ");
menuItem.setDescription(scanner.nextLine());
System.out.print("Insert image: ");
menuItem.setImage(scanner.nextLine());
System.out.print("Insert price:");
menuItem.setPrice(scanner.nextFloat());
}
});
} catch (NullPointerException | IllegalStateException exception){
System.out.println(exception.getMessage());
} catch (InputMismatchException exception){
System.out.print(new InputMismatchException("Menu item quantity must be number !!!").getMessage());
}
}
我不确定回答,但我很快就看到了:
@Test
void updateMenu(){
DailyMenu dailyMenu = DailyMenu();
MenuItem menuItem= new MenuItem();
menuItem.setNames("Pasta");
dailyMenu.getMenuItemList().add(dailyMenu);
Scanner mockScanner = mock(Scanner.class);
//set up the scanner
when(mockScanner.nextLine()).thenReturn("Pasta");
InputOutput inputOutput= new InputOutput(mockScanner);
yourClasse.updateMenu();
assertEquals("Pasta", inputOutput.getInput());
assertEquals(dailyMenu.getNames(),inputOutput.getInput());
}
希望能帮到你。