gpt4 book ai didi

java - 如何测试类中的 for 循环是否可用?

转载 作者:行者123 更新时间:2023-12-02 09:04:37 50 4
gpt4 key购买 nike

让我先解释一下用例。

用例是学习者学习 java正在遵循一组书面指令并使用自动化测试(请阅读 JUnit ),我想测试他们是否已成功执行该指令。

例如,我需要以编程方式找出是否是 for代码中存在循环。考虑以下代码

class AClass {
public static void main(String[] args){
for(int i=1; i<11; i++){
System.out.println("Count is: " + i);
}
}
}

有没有一种方法可以使用反射 API,我可以断言 AClass包含for(int i=1; i<11; i++) ?或者有其他方式吗?

这个问题是一个例子。理想情况下,可能有一个代码,例如 if (x) {}我可能想在类里面找到答案。

我不确定这有多可行。

谢谢

最佳答案

反射显然在这里没有帮助,因为它不允许访问方法的内部(例如 forif 等指令)。

从这个问题来看,您似乎正在开发某种学习系统,该系统可以对学生的作业进行自动评估/评分

所以在我看来你有两个选择:

  1. 您还可以访问源代码,因此 for 循环的存在可以成为源代码分析器的一项任务,甚至可以在 Junit 之前运行。一种检查学生是否作弊的额外步骤:
// OK - this will pass
public void methodToImplement() {
for(int i = 0; i < 3; i++) {
System.out.println("Hello: " + i);
}
}

// this is an attempt to cheat that should be recognized:
public void methodToImplement() {
System.out.println("Hello: " + 0);
System.out.println("Hello: " + 1);
System.out.println("Hello: " + 2);
}
  • 您可以通过“读取”字节码(例如打开 *.class 文件并将指令集读入内存,就像它是字符串或其他东西一样)并搜索特定指令来访问字节码,但您实际上并没有保证编译器不会进行某种优化,并且会故意消除循环(好吧,在这个例子中,这可能不会发生,我并不是真正的编译器优化专家,但你大体上明白了这个想法) .
  • 关于java - 如何测试类中的 for 循环是否可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59914713/

    50 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com