当我使用“execute(p)”方法时,会出现一个列表,我必须选择一个项目:
@Override
public void execute(Player p) {
// listchoser with items available
ListChoser lc = new ListChoser();
Object itemChosen;
itemChosen = lc.chose("Which item?", p.getCurrentRoom().getItems());
System.out.println("You chose " + itemChosen.toString());
// put item effect on player
((Item) itemChosen).effect(p);
// remove item from current room
p.getCurrentRoom().removeItem(itemChosen);
}
我必须对其进行一些单元测试,因此我将如何进行:
Player c;
Action useAction;
@Before
public void initiliaze() {
c = new Player("Test", 100, 100,100);
c.setCurrentRoom(new Room("Debug Room", false));
useAction = new UseAction();
}
@Test
public void testUseAction(){
List<? super Item> l = c.getCurrentRoom().getItems();
int nbItems = l.size();
useAction.execute(c);
assertEquals(nbItems-1, c.getCurrentRoom().getItems().size());
}
当我启动此类测试时,我在处理此类测试时遇到了一些麻烦:当我应该只使用默认测试(例如 0 测试)时,系统会要求我输入输入
最佳答案
我建议将您的execute()方法分成两个单独的方法,这样第一个方法只接受输入,处理它并将操作结果传递给包含所有其余逻辑的第二个方法。
这使您的代码与 SOLID 一致的单一职责原则,还可以测试负责逻辑的代码部分,而不需要用户的任何输入(您可以只传递一些准备好的对象)
关于对带有输入的方法进行 Java 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52722745/