Java BufferedReader ready()方法始终为true
我尝试在使用BufferedReader intance的类中测试一个方法:Java BufferedReader ready()方法始终为true,java,unit-testing,reflection,bufferedreader,Java,Unit Testing,Reflection,Bufferedreader,我尝试在使用BufferedReader intance的类中测试一个方法: public class ClassTotest { private BufferedReader reader; public boolean methodToTest(){ while (reader.ready()){ reader.readLine(); } more code } } 在我的测试类中,我使用反射初始化了reader实例: class MyTest{ @Test
public class ClassTotest {
private BufferedReader reader;
public boolean methodToTest(){
while (reader.ready()){
reader.readLine();
}
more code
}
}
在我的测试类中,我使用反射初始化了reader实例:
class MyTest{
@Test
public void test(){
ClassTotest testClass = new ClassTotest();
Field reader = ClassTotest.class
.getDeclaredField("reader");
reader.setAccessible(true);
StringReader stringReader = new StringReader("testString");
BufferedReader readerToSet = new BufferedReader(stringReader);
reader.set(testClass, readerToSet);
testClass.methodToTest();
}
它进入方法,我可以看到reader对象已初始化,但当询问if ready()时,它总是返回true。所以它进入了一个无限循环
如何初始化读卡器以避免这种无限循环?为什么要使用
ready()
?您应该使用readLine()
,当它返回null
时停止,为什么要使用ready()
?您应该使用readLine()
,当它返回null
时停止,为什么要使用ready()
?您应该使用readLine()
,当它返回null
时停止,为什么要使用ready()
?您应该使用readLine()
并在它返回null
时停止
如何初始化读取器以避免这种无限循环
你不能
您必须测试readLine()
方法的结果。当您到达流的末尾时,它将返回null
一个常见的成语是:
String line;
while ((line = reader.readLine()) != null) {
// process line
}
ready()
方法的javadoc说明:
返回:如果保证下一个read()不会阻止输入,则返回True,否则返回false
由于流结束位置的readLine()
保证立即返回,ready()
必须返回true
如果仔细考虑与
不幸的是,我无法更改必须测试的类中的代码 您已经在测试的类中识别出一个BUG!如果你自己不能解决问题,那么就向有能力的人报告。(这就是编写单元测试的要点…) 如何初始化读取器以避免这种无限循环 你不能 您必须测试
readLine()
方法的结果。当您到达流的末尾时,它将返回null
一个常见的成语是:
String line;
while ((line = reader.readLine()) != null) {
// process line
}
ready()
方法的javadoc说明:
返回:如果保证下一个read()不会阻止输入,则返回True,否则返回false
由于流结束位置的readLine()
保证立即返回,ready()
必须返回true
如果仔细考虑与
不幸的是,我无法更改必须测试的类中的代码 您已经在测试的类中识别出一个BUG!如果你自己不能解决问题,那么就向有能力的人报告。(这就是编写单元测试的要点…) 如何初始化读取器以避免这种无限循环 你不能 您必须测试
readLine()
方法的结果。当您到达流的末尾时,它将返回null
一个常见的成语是:
String line;
while ((line = reader.readLine()) != null) {
// process line
}
ready()
方法的javadoc说明:
返回:如果保证下一个read()不会阻止输入,则返回True,否则返回false
由于流结束位置的readLine()
保证立即返回,ready()
必须返回true
如果仔细考虑与
不幸的是,我无法更改必须测试的类中的代码 您已经在测试的类中识别出一个BUG!如果你自己不能解决问题,那么就向有能力的人报告。(这就是编写单元测试的要点…) 如何初始化读取器以避免这种无限循环 你不能 您必须测试
readLine()
方法的结果。当您到达流的末尾时,它将返回null
一个常见的成语是:
String line;
while ((line = reader.readLine()) != null) {
// process line
}
ready()
方法的javadoc说明:
返回:如果保证下一个read()不会阻止输入,则返回True,否则返回false
由于流结束位置的readLine()
保证立即返回,ready()
必须返回true
如果仔细考虑与
不幸的是,我无法更改必须测试的类中的代码 您已经在测试的类中识别出一个BUG!如果你自己不能解决问题,那么就向有能力的人报告。(这就是编写单元测试的要点…)替换您的
,而(reader.ready())
则
String line = null;
do{
line = reader.readLine();
}while (line!= null);
在(reader.ready())时将您的替换为
String line = null;
do{
line = reader.readLine();
}while (line!= null);
在(reader.ready())
时将您的替换为
String line = null;
do{
line = reader.readLine();
}while (line!= null);
雷帕克