자바 InputStream 모의
Java InputStream 객체를 모의하는 데 도움이되는 포인터를 제공하십시오. 이것은 내가 모의하려는 코드 줄입니다.
InputStreamReader inputData = new InputStreamReader(System.in);
bufferdReader = new BufferedReader(inputData);
bufferdReader.readLine();
BufferedReader bufferedReader = org.mockito.Mockito.mock(BufferedReader.class);
when(bufferedReader.readLine()).thenReturn("first line").thenReturn("second line");
org.junit.Assert.when(new Client(bufferedReader).parseLine()).thenEquals(IsEqual.equalTo("1"));
commons-io 를 사용하여 스텁 입력 스트림을 만들 수 있습니다 .
InputStream stubInputStream =
IOUtils.toInputStream("some test data for my input stream", "UTF-8");
a를 사용하고 ByteArrayInputStream
테스트 데이터로 채울 수 있습니다.
댓글에서 @Brad의 예 :
InputStream anyInputStream = new ByteArrayInputStream("test data".getBytes());
이 질문에 대해 선택한 답변에 동의하지 않습니다. Mockito와 같은 모의 프레임 워크는 훌륭하지만 표준 자바 API를 사용할 수있는 경우 대신 사용할 수 있습니다.
즉
BufferedReader reader = new BufferedReader(new StringReader("some string"));
모든 상태와 동작이있는 실제 객체를 사용할 수 있는데 왜 테스트 클래스에서 Mock 객체를 사용합니까?
이것이 어떻게 작동하는지 자세히 알아 보려면 '장식 자'디자인 패턴을 찾아 볼 수 있습니다.
다음과 같이 테스트하기 쉽도록 개체를 변경합니다.
public MyObject {
private InputStream inputStream;
public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}
public void whatever() {
InputStreamReader inputData = new InputStreamReader(inputStream);
bufferdReader = new BufferedReader(inputData);
bufferdReader.readLine();
}
}
그런 다음 객체를 사용할 때 inputStream을 먼저 초기화하십시오.
MyObject myObject = new MyObject();
myObject.setInputStream(System.in);
이제 원하는 InputStream 구현을 사용하여 테스트 할 수있는 개체가 생겼습니다 (ByteArrayInputStream은 시도해 볼 수있는 좋은 방법입니다).
@Test
public void testReadFile() {
TestClass ClassName = Mockito.mock(TestClass.class);
InputStream in = Mockito.mock(InputStream.class);
InputStreamReader inr =Mockito.mock(InputStreamReader.class);
BufferedReader bufferedReader =Mockito.mock(BufferedReader.class);
try {
PowerMockito.whenNew(InputStreamReader.class).withArguments(in).thenReturn(inr);
PowerMockito.whenNew(BufferedReader.class).withArguments(inr).thenReturn(bufferedReader);
String line1 = "example line";
PowerMockito.when(bufferedReader.readLine()).thenReturn(line1).thenReturn(null);
method return type = Whitebox.invokeMethod(ClassName, "MethodName", arguement);
assertEquals("result is::","expected", actual);
} catch (Exception e) {
e.printStackTrace();
}
}
String testString = "test\nstring";
InputStream stream = new ByteArrayInputStream(testString.getBytes(StandardCharsets.UTF_8));
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
Assert.assertEquals("test", reader.readLine());
Assert.assertEquals("string", reader.readLine());
내가 찾은 최고의 솔루션은
final InputStream inputStream1 = IOUtils.toInputStream("yourdata");
그런 다음 inpustream을 bufferedReader로 래핑하여 입력 스트림 주위에 테스트를 작성하는 가장 좋은 방법
Maven을 사용한다고 가정하면 "src / test / resources /"폴더에 리소스를 넣을 수 있습니다. "src / test / resources / wonderful-mock-data.xml " 이라고 가정 해 보겠습니다 . 그런 다음 jUnit에서 다음을 수행 할 수 있습니다.
String resourceInputFile = "/database-insert-test.xml";
URL url = this.getClass().getResource(resourceInputFile);
Assert.assertNotNull("Can't find resource " + resourceInputFile, url);
InputStream inputStream = url.openStream();
// Now you can just use the inputStream for method calls requiring this param
(...)
In this example the url varialble will be null if the given resource can't be found inside current classpath. This approach allows you to put multiple scenarios inside different resourceInputFile(s)... Also remember that all kind of resources under "src/test/resources/" (not just xml files, any kind like txt, html, jpeg, etc.) are normaly available as classpath resources from all jUnit tests.
when(imageService.saveOrUpdate(Matchers.<Image>anyObject())).thenReturn(image);
Reference http://www.javased.com/?api=org.mockito.Matchers
ReferenceURL : https://stackoverflow.com/questions/6371379/mocking-java-inputstream
'programing' 카테고리의 다른 글
instanceof-호환되지 않는 조건부 피연산자 유형 (0) | 2021.01.16 |
---|---|
Android : MediaPlayer setVolume 함수 (0) | 2021.01.16 |
삼항 연산자에 사용하는 코딩 스타일은 무엇입니까? (0) | 2021.01.16 |
왼쪽 / 오른쪽과 위 / 아래 사이의 스 와이프 방향을 감지하는 방법 (0) | 2021.01.16 |
Spark : Spark Shell에서 Spark 파일을 실행하는 방법 (0) | 2021.01.16 |