【发布时间】:2021-02-18 10:39:23
【问题描述】:
我有接受用户输入的 Spring Boot 控制台应用程序。在同一个应用程序中,有服务来执行一些逻辑。
在直接运行服务的 JUnit 测试用例时,我观察到控制台应用程序处于接受用户输入状态的行为,因此没有进入 JUnit 测试。
通常没有问题,因为对于普通的 Spring Boot 应用程序,启动时没有什么可运行的。但是对于这个控制台应用程序设置,它等待用户输入。
我想知道是否有任何方法可以让测试用例在不触发控制台应用程序的情况下运行?非常感谢。
观察:JUnit测试用例运行时触发控制台应用,没有进入测试用例
主要应用
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ToyRobotApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(ToyRobotApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
// Instruct user to perform input
System.out.println("Welcome to toy robot application!");
System.out.println("Below are the possible operations:");
System.out.println("PLACE <x-coordinate> <y-coordinate> <facing>");
System.out.println("MOVE");
System.out.println("LEFT");
System.out.println("RIGHT");
System.out.println("REPORT");
while (true) {
System.out.println("Please enter your command:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String usrInput = br.readLine();
//...
}
}
}
测试用例
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.somecompany.model.Facing;
import com.somecompany.model.Location;
import com.somecompany.model.Robot;
import com.somecompany.service.ToyRobotService;
@SpringBootTest
public class ToyRobotReportTest {
@Autowired
private Robot robot;
@Autowired
private ToyRobotService toyRobotService;
@Test
public void shouldBeAbleToReportLocation() {
Location location = new Location();
location.setXCor("1");
location.setYCor("2");
location.setFacing(Facing.NORTH);
robot.setLocation(location);
// Actual result
String result = toyRobotService.report();
// Assertion
assertEquals("1,2,NORTH", result);
}
}
注意:其他来源省略
【问题讨论】:
标签: java spring-boot junit