对带有输入的方法进行 Java 单元测试

标签 java unit-testing

当我使用“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/

相关文章:

Java:计算数组中的每个数字

java - 如何从 WebView 中获取文本

java - 什么是好的嵌入式java应用服务器

java - 我可以使用什么输入文件格式来创建方程式?

php - 测试 Controller = 集成测试?

java - 使用 JUnit 在多线程环境中测试方法行为?

java - 如何在eclipse中打开现有的tomcat web应用程序项目

c# - 使用 Machine.Specs 使用 MVC MailerBase 测试类时出错

当我尝试使用 espresso 填充多个编辑文本时,抛出 android.support.test.espresso.InjectEventSecurityException

unit-testing - 在 ABAP 单元测试中模拟 sy-uname