zoukankan      html  css  js  c++  java
  • 至诚学院测试代码编写小结

    至诚学院测试代码编写小结

    Github链接:https://github.com/ChildishChange/zcxyAutoTest

    需求

    获取 https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2079

    设计

    命令行参数

    json config

    repo clone

    初始化单个项目

    遇到的困难

    1. 编译目录下的多个 java 文件

      使用通配符 *.java 即可

    2. 编译不同编码的 java 文件

      这个增加一个 javac -encoding UTF-8 java文件路径 就可以了

    3. 跨目录使用 java 运行 class 文件提示:“错误:找不到类或无法加载主类”

      • 问题描述:

        在目录 A 下运行测试程序,测试程序调用 cmd.exe ,此时 cmd.exe 的工作区是测试程序所在的目录,即目录 A。

        测试程序随即向 cmd.exe 输入如下命令,此时 java 报错。

      • 原因分析:

        java 指令默认在 CLASSPATH 环境变量中寻找 .class 文件。

        CLASSPATH为 .;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.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文件要放置在 ac 目录下。

        然后,运行类时输入类的全名 : 包名 + 类名

        java -classpath 相对包的路径 包名.类名

      相关链接:

      https://www.cnblogs.com/wangxiaoha/p/6293340.html

      https://www.cnblogs.com/Wjh794010585/articles/6582079.html

    4. C#同时读取程序的标准输出流与标准错误流时可能会产生死锁

      • 错误描述

        程序调用 cmd.exe 时,重定向了进程的标准输出和标准错误,并使用了同步读取方式读取输出流和错误流。在读取输出流时,程序会所卡死。

        string output = p.StandardOutput.ReadToEnd();  
        
      • 分析原因

        同步读取操作引入了 读取标准输出流 的 调用方和 写入输出流 的 子进程之间的依赖。 这种依赖可能会导致死锁。当调用方从子进程重定向后的流中读取数据时,调用方依赖于子进程。调用方等待读操作,直到子进程完成写入并关闭流。当子进程写入了足够填满重定向流的数据时,它依赖于其父进程。子进程等待下一次写操作,直到父进程从完整流中读取并关闭流。于是死锁发生了。

        https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.process.standardoutput?redirectedfrom=MSDN&view=netframework-4.7.2#System_Diagnostics_Process_StandardOutput

      • 解决方案

        使用异步读取

    总结与感想

    教师/助教在决定使用自动测试后,一定要在作业中明确要求所有的测试点,当不明确规定测试点时,则一定需要在测试程序中增加对不同情况的支持

    以本次作业为例。

    我建议明确规定乘除法必须使用 ×÷ 符号,老师则认为可以不明确规定这一点,而把它作为需求分析的一点,希望学生能够得出这个需求。

    而我在编写测试代码的时候也想的过于美好,按照 ×÷ 符号编写了测试代码。

    结果,绝大多数学生没有得出这个需求,因此,他们的代码没有通过测试。

    修改了代码之后,通过的同学变多了。

    限制大家编写java使用的编码

  • 相关阅读:
    pcs7 opc 连接问题
    nuget 多个程序引用同一个库时,当个这个库更新时,引用的程序都要跟新,否则会在运行时出错
    nuget update FileConflictAction
    a
    C#版本
    .NET Framework版本与CLR版本之间的关系
    c# 将一种数组类型转成另一种数组类型
    tfs 清除缓存,在需要时
    java枚举和仿枚举
    java反射的用法
  • 原文地址:https://www.cnblogs.com/ChildishChange/p/9675668.html
Copyright © 2011-2022 走看看