Junit Test for InputStreamReader with Mockito
Can you please help me in writing the Junit test case for the below code?
public class ConsoleReader implements InputReader {
public Cell readInput() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = reader.readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
}
java junit mockito
add a comment |
Can you please help me in writing the Junit test case for the below code?
public class ConsoleReader implements InputReader {
public Cell readInput() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = reader.readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
}
java junit mockito
1
Insteed ofnew InputStreamReader(System.in)passSystem.inas method argument so you will be able to actually push data into the stream.
– Antoniossss
Nov 20 at 12:10
Possible duplicate of Mocking Java InputStream
– Renny
Nov 20 at 13:01
1
as Antoniossss has suggested the best solution (even from design perspective). if you dont like that solution , there is a tricky/dirty solution. use the System.setIn and set a mock inputstream , once your test case is executed restore the system.in using the same method. this will work only in environment you dont have securitymanger or you have permission to setIO
– hunter
Nov 20 at 13:57
add a comment |
Can you please help me in writing the Junit test case for the below code?
public class ConsoleReader implements InputReader {
public Cell readInput() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = reader.readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
}
java junit mockito
Can you please help me in writing the Junit test case for the below code?
public class ConsoleReader implements InputReader {
public Cell readInput() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = reader.readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
}
java junit mockito
java junit mockito
edited Nov 20 at 12:08
asked Nov 20 at 12:02
Sunny
16513
16513
1
Insteed ofnew InputStreamReader(System.in)passSystem.inas method argument so you will be able to actually push data into the stream.
– Antoniossss
Nov 20 at 12:10
Possible duplicate of Mocking Java InputStream
– Renny
Nov 20 at 13:01
1
as Antoniossss has suggested the best solution (even from design perspective). if you dont like that solution , there is a tricky/dirty solution. use the System.setIn and set a mock inputstream , once your test case is executed restore the system.in using the same method. this will work only in environment you dont have securitymanger or you have permission to setIO
– hunter
Nov 20 at 13:57
add a comment |
1
Insteed ofnew InputStreamReader(System.in)passSystem.inas method argument so you will be able to actually push data into the stream.
– Antoniossss
Nov 20 at 12:10
Possible duplicate of Mocking Java InputStream
– Renny
Nov 20 at 13:01
1
as Antoniossss has suggested the best solution (even from design perspective). if you dont like that solution , there is a tricky/dirty solution. use the System.setIn and set a mock inputstream , once your test case is executed restore the system.in using the same method. this will work only in environment you dont have securitymanger or you have permission to setIO
– hunter
Nov 20 at 13:57
1
1
Insteed of
new InputStreamReader(System.in) pass System.in as method argument so you will be able to actually push data into the stream.– Antoniossss
Nov 20 at 12:10
Insteed of
new InputStreamReader(System.in) pass System.in as method argument so you will be able to actually push data into the stream.– Antoniossss
Nov 20 at 12:10
Possible duplicate of Mocking Java InputStream
– Renny
Nov 20 at 13:01
Possible duplicate of Mocking Java InputStream
– Renny
Nov 20 at 13:01
1
1
as Antoniossss has suggested the best solution (even from design perspective). if you dont like that solution , there is a tricky/dirty solution. use the System.setIn and set a mock inputstream , once your test case is executed restore the system.in using the same method. this will work only in environment you dont have securitymanger or you have permission to setIO
– hunter
Nov 20 at 13:57
as Antoniossss has suggested the best solution (even from design perspective). if you dont like that solution , there is a tricky/dirty solution. use the System.setIn and set a mock inputstream , once your test case is executed restore the system.in using the same method. this will work only in environment you dont have securitymanger or you have permission to setIO
– hunter
Nov 20 at 13:57
add a comment |
2 Answers
2
active
oldest
votes
You can use Mockito to mock the BufferedReader, like the example below.
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
Mockito.when(bufferedReader.readLine()).thenReturn("1", "2", "3");
// You can mock the result based on the type of result you are expecting.
But he must pass that mock first.
– Antoniossss
Nov 20 at 12:37
add a comment |
Extract the
readeras a field. (You can initiaize it either directly or in constructor)
private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Define a getter (either
publicorprotected)
protected BufferedReader getReader(){
return reader;
}
Remove initialization of
new BufferedReader(...)from your method. Retrieve it usinggetReader()instead.
public Cell readInput() {
try {
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = getReader().readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
In your test class initialize your
ConsoleReaderasMockito.spy
ConsoleReader consoleReader = spy(new ConsoleReader());
Mock your getter
@Before
public void setUp() {
BufferedReader bufferedReader = mock(BufferedReader.class);
doReturn(bufferedReader).when(consoleReader).getReader();
doCallRealMethod().when(consoleReader).readInput();
}
Define your test:
@Test
public void testReadInput() {
when(bufferedReader.readLine()).thenReturn("123,456");
Cell expectedCell = new Cell(123, 456);
Cell actualCell = consoleReader.readInput();
assertEquals(expectedCell, actualCell);
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53392599%2fjunit-test-for-inputstreamreader-with-mockito%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use Mockito to mock the BufferedReader, like the example below.
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
Mockito.when(bufferedReader.readLine()).thenReturn("1", "2", "3");
// You can mock the result based on the type of result you are expecting.
But he must pass that mock first.
– Antoniossss
Nov 20 at 12:37
add a comment |
You can use Mockito to mock the BufferedReader, like the example below.
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
Mockito.when(bufferedReader.readLine()).thenReturn("1", "2", "3");
// You can mock the result based on the type of result you are expecting.
But he must pass that mock first.
– Antoniossss
Nov 20 at 12:37
add a comment |
You can use Mockito to mock the BufferedReader, like the example below.
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
Mockito.when(bufferedReader.readLine()).thenReturn("1", "2", "3");
// You can mock the result based on the type of result you are expecting.
You can use Mockito to mock the BufferedReader, like the example below.
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);
Mockito.when(bufferedReader.readLine()).thenReturn("1", "2", "3");
// You can mock the result based on the type of result you are expecting.
answered Nov 20 at 12:33
joemokenela
1465
1465
But he must pass that mock first.
– Antoniossss
Nov 20 at 12:37
add a comment |
But he must pass that mock first.
– Antoniossss
Nov 20 at 12:37
But he must pass that mock first.
– Antoniossss
Nov 20 at 12:37
But he must pass that mock first.
– Antoniossss
Nov 20 at 12:37
add a comment |
Extract the
readeras a field. (You can initiaize it either directly or in constructor)
private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Define a getter (either
publicorprotected)
protected BufferedReader getReader(){
return reader;
}
Remove initialization of
new BufferedReader(...)from your method. Retrieve it usinggetReader()instead.
public Cell readInput() {
try {
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = getReader().readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
In your test class initialize your
ConsoleReaderasMockito.spy
ConsoleReader consoleReader = spy(new ConsoleReader());
Mock your getter
@Before
public void setUp() {
BufferedReader bufferedReader = mock(BufferedReader.class);
doReturn(bufferedReader).when(consoleReader).getReader();
doCallRealMethod().when(consoleReader).readInput();
}
Define your test:
@Test
public void testReadInput() {
when(bufferedReader.readLine()).thenReturn("123,456");
Cell expectedCell = new Cell(123, 456);
Cell actualCell = consoleReader.readInput();
assertEquals(expectedCell, actualCell);
}
add a comment |
Extract the
readeras a field. (You can initiaize it either directly or in constructor)
private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Define a getter (either
publicorprotected)
protected BufferedReader getReader(){
return reader;
}
Remove initialization of
new BufferedReader(...)from your method. Retrieve it usinggetReader()instead.
public Cell readInput() {
try {
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = getReader().readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
In your test class initialize your
ConsoleReaderasMockito.spy
ConsoleReader consoleReader = spy(new ConsoleReader());
Mock your getter
@Before
public void setUp() {
BufferedReader bufferedReader = mock(BufferedReader.class);
doReturn(bufferedReader).when(consoleReader).getReader();
doCallRealMethod().when(consoleReader).readInput();
}
Define your test:
@Test
public void testReadInput() {
when(bufferedReader.readLine()).thenReturn("123,456");
Cell expectedCell = new Cell(123, 456);
Cell actualCell = consoleReader.readInput();
assertEquals(expectedCell, actualCell);
}
add a comment |
Extract the
readeras a field. (You can initiaize it either directly or in constructor)
private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Define a getter (either
publicorprotected)
protected BufferedReader getReader(){
return reader;
}
Remove initialization of
new BufferedReader(...)from your method. Retrieve it usinggetReader()instead.
public Cell readInput() {
try {
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = getReader().readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
In your test class initialize your
ConsoleReaderasMockito.spy
ConsoleReader consoleReader = spy(new ConsoleReader());
Mock your getter
@Before
public void setUp() {
BufferedReader bufferedReader = mock(BufferedReader.class);
doReturn(bufferedReader).when(consoleReader).getReader();
doCallRealMethod().when(consoleReader).readInput();
}
Define your test:
@Test
public void testReadInput() {
when(bufferedReader.readLine()).thenReturn("123,456");
Cell expectedCell = new Cell(123, 456);
Cell actualCell = consoleReader.readInput();
assertEquals(expectedCell, actualCell);
}
Extract the
readeras a field. (You can initiaize it either directly or in constructor)
private final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Define a getter (either
publicorprotected)
protected BufferedReader getReader(){
return reader;
}
Remove initialization of
new BufferedReader(...)from your method. Retrieve it usinggetReader()instead.
public Cell readInput() {
try {
System.out.print("Enter the co-ordinate Seperated by Comma");
String coOrdinates = getReader().readLine();
String values=coOrdinates.split("\,");
return new Cell(Integer.parseInt(values[0]),Integer.parseInt(values[1]));
} catch (IOException ioe) {
ioe.printStackTrace();
}
return null;
}
In your test class initialize your
ConsoleReaderasMockito.spy
ConsoleReader consoleReader = spy(new ConsoleReader());
Mock your getter
@Before
public void setUp() {
BufferedReader bufferedReader = mock(BufferedReader.class);
doReturn(bufferedReader).when(consoleReader).getReader();
doCallRealMethod().when(consoleReader).readInput();
}
Define your test:
@Test
public void testReadInput() {
when(bufferedReader.readLine()).thenReturn("123,456");
Cell expectedCell = new Cell(123, 456);
Cell actualCell = consoleReader.readInput();
assertEquals(expectedCell, actualCell);
}
answered Nov 20 at 15:06
ETO
1,589320
1,589320
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53392599%2fjunit-test-for-inputstreamreader-with-mockito%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Insteed of
new InputStreamReader(System.in)passSystem.inas method argument so you will be able to actually push data into the stream.– Antoniossss
Nov 20 at 12:10
Possible duplicate of Mocking Java InputStream
– Renny
Nov 20 at 13:01
1
as Antoniossss has suggested the best solution (even from design perspective). if you dont like that solution , there is a tricky/dirty solution. use the System.setIn and set a mock inputstream , once your test case is executed restore the system.in using the same method. this will work only in environment you dont have securitymanger or you have permission to setIO
– hunter
Nov 20 at 13:57