我再次......同样的背景。我在Dr.Java中为我的构造函数运行了一个测试文件。它是关于读取要测试的目录中的文件。以下是测试文件中内容的一部分:
public void cw_println_file1 () throws Exception {
String actual, msg, expect;
String filename;
CensoredWriter out;
for(int i=0; i<fileLines.length; i++){
String [][] test = fileLines[i];
String censor = test[0][0];
String [] outLines = test[1];
String [] expectLines = test[2];
filename = String.format("testfile_%d.txt",i);
out = new CensoredWriter(filename,censor);
for(int j=0; j<outLines.length; j++) {
out.println(outLines[j]);
}
out.close();
assertLines(expectLines, filename);
}
}
我收到如下错误消息:
文件:C:\ Users \ jiangbuyun \ Desktop \ lab5 \ distrib-lab05 \ Lab05Tests.java [line:137]
失败: org.junit.ComparisonFailure:文件testfile_1.txt第1行
期待: A%!^ #@ er-scooper,或%!^ #@ scoop,是用于拾取动物的设备
实际: A%!^ #@ er-scooper或%!^ #@ scoop,是一种用于从公共场所和码头拾取动物粪便的设备,特别是那些狗。 %!^ *#@ er-scooper设备通常有袋子或袋子附件。
预期:&lt; ... ed to pick up animal []&gt;
但是:&lt; ...来接收动物[来自公共场所和院子的粪便,特别是那些狗的粪便。 %!^ *#@ er-scooper设备通常有一个袋子或袋子附件。]
我发现它应该停在“动物”之后的括号中,并且两个括号之间没有任何内容,但它实际上继续阅读文本并将其放入括号内。
public class CensoredWriter extends PrintWriter {
String censored;
public CensoredWriter(OutputStream o, String c) {
super(o);
this.censored = c;
}
public CensoredWriter(File f, String c) throws Exception {
super(f);
this.censored = c;
}
public CensoredWriter(String s, String c) throws Exception {
super(s);
this.censored = c;
}
public String transform(String s) {
String a = s.replaceAll(censored, "%!^*#@");
return a;
}
@Override
public void print(String s) {
super.print(transform(s));
}
@Override
public void println(String s) {
print(s);
flush();
}
}
答案 0 :(得分:0)
根据您发布的内容,问题是您似乎将censored
替换为"%!^*#@"
,因此部分实施可行。但是,在animal
之后停止是尚未实施的部分。
顺便提一下,在提问时,尽量提供必要的背景。例如,我认为您的方法cw_println_file1
是一种测试(@Test
)方法 - 无需猜测就可以看到它。此外,如果您的方法需要@Before
方法中的某些内容(例如。fileLines
似乎在其他地方声明),那么读者可以帮助您理解您的问题以查看所需的部分。