至诚学院测试代码编写小结
至诚学院测试代码编写小结
Github链接:https://github.com/ChildishChange/zcxyAutoTest
需求
获取 https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2079
设计
命令行参数
json config
repo clone
初始化单个项目
遇到的困难
-
编译目录下的多个 java 文件
使用通配符
*.java
即可 -
编译不同编码的 java 文件
这个增加一个
javac -encoding UTF-8 java文件路径
就可以了 -
跨目录使用 java 运行 class 文件提示:“错误:找不到类或无法加载主类”
-
问题描述:
在目录 A 下运行测试程序,测试程序调用 cmd.exe ,此时 cmd.exe 的工作区是测试程序所在的目录,即目录 A。
测试程序随即向 cmd.exe 输入如下命令,此时 java 报错。
-
原因分析:
java 指令默认在
CLASSPATH
环境变量中寻找.class
文件。CLASSPATH为
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
可以看到:第一个
;
前有一个.
。这表示搜索 class 文件时,jdk 首先在当前目录下查找。此时,“当前目录”即目录 A,jdk 在这个目录下必然找不到这个 class 文件,所以会报错。
-
解决方案:
添加 classpath 参数:
java -classpath 相对类的路径 类名
除此以外,还有另一种原因,就是
.java
文件首声明了package
信息。-
原因分析:
java 类的全名为
包名 + 类名
,声明 package 信息后,类 A 的全名就变成了a.b.c.A
java 规定按照 package 路径存放源文件。
-
解决方案:
首先,在文件编译后,需要将class文件放置在 package 指定的目录下,例如包名为
a.b.c
,则class文件要放置在a\b\c\
目录下。然后,运行类时输入类的全名 : 包名 + 类名
java -classpath 相对包的路径 包名.类名
相关链接:
-
-
C#同时读取程序的标准输出流与标准错误流时可能会产生死锁
-
错误描述
程序调用 cmd.exe 时,重定向了进程的标准输出和标准错误,并使用了同步读取方式读取输出流和错误流。在读取输出流时,程序会所卡死。
string output = p.StandardOutput.ReadToEnd();
-
分析原因
同步读取操作引入了 读取标准输出流 的 调用方和 写入输出流 的 子进程之间的依赖。 这种依赖可能会导致死锁。当调用方从子进程重定向后的流中读取数据时,调用方依赖于子进程。调用方等待读操作,直到子进程完成写入并关闭流。当子进程写入了足够填满重定向流的数据时,它依赖于其父进程。子进程等待下一次写操作,直到父进程从完整流中读取并关闭流。于是死锁发生了。
-
解决方案
使用异步读取
-
总结与感想
教师/助教在决定使用自动测试后,一定要在作业中明确要求所有的测试点,当不明确规定测试点时,则一定需要在测试程序中增加对不同情况的支持。
以本次作业为例。
我建议明确规定乘除法必须使用 ×÷
符号,老师则认为可以不明确规定这一点,而把它作为需求分析的一点,希望学生能够得出这个需求。
而我在编写测试代码的时候也想的过于美好,按照 ×÷
符号编写了测试代码。
结果,绝大多数学生没有得出这个需求,因此,他们的代码没有通过测试。
修改了代码之后,通过的同学变多了。
限制大家编写java使用的编码
posted on 2018-09-19 17:19 ChildishChange 阅读(226) 评论(0) 编辑 收藏 举报