java单元测试模拟用户输入数据
时间: 2023-05-28 15:03:29 浏览: 78
在Java中,可以使用Scanner类来模拟用户输入数据。Scanner类可以从标准输入流(System.in)中读取用户输入的数据。以下是一个简单的示例:
```java
import java.util.Scanner;
public class UserInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
System.out.println("你输入的整数是:" + num);
}
}
```
在单元测试中,可以使用Java的Mockito框架来模拟Scanner类的行为,以便测试需要用户输入的代码。以下是一个示例:
```java
import static org.mockito.Mockito.*;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Scanner;
import org.junit.Test;
public class UserInputTest {
@Test
public void testUserInput() {
String input = "123\n";
InputStream inputStream = new ByteArrayInputStream(input.getBytes());
Scanner scanner = new Scanner(inputStream);
// 创建Mock对象,模拟Scanner类的行为
Scanner mockScanner = mock(Scanner.class);
when(mockScanner.nextInt()).thenReturn(scanner.nextInt());
// 调用需要用户输入的方法
int num = mockScanner.nextInt();
// 断言结果
assertEquals(123, num);
}
}
```
在上面的示例中,我们创建了一个ByteArrayInputStream对象,并将其传递给Scanner类的构造函数,以便将字符串输入模拟为标准输入流。然后,我们使用Mockito框架创建了一个Scanner类的Mock对象,并使用when()方法指定Mock对象的行为。最后,我们调用需要用户输入的方法,并断言结果是否符合预期。