在Google App Engine的Java版本中,如何评估和执行作为字符串传入的Java代码和单元测试?

在Google App Engine的Java版本中,如何评估和执行作为字符串传入的Java代码和单元测试?,java,unit-testing,google-app-engine,junit,Java,Unit Testing,Google App Engine,Junit,我目前正在使用一个运行在GoogleAppEngine中的在线系统,使学生能够练习用python编写代码。该系统的灵感来源于Nick Parlante和appengine上运行的公共版本 我想扩展我们的系统以支持Java。在我们当前的系统中,pythondoctest特性使讲师可以非常轻松地键入一系列变量声明和doctest,然后可以对学生提交的代码执行这些声明和doctest。这对于指导者来说是非常直观的,这对于确保很多人都在编写测试非常重要 如何用Java代码替换以下注释以评估和执行Java

我目前正在使用一个运行在GoogleAppEngine中的在线系统,使学生能够练习用python编写代码。该系统的灵感来源于Nick Parlante和appengine上运行的公共版本

我想扩展我们的系统以支持Java。在我们当前的系统中,pythondoctest特性使讲师可以非常轻松地键入一系列变量声明和doctest,然后可以对学生提交的代码执行这些声明和doctest。这对于指导者来说是非常直观的,这对于确保很多人都在编写测试非常重要

如何用Java代码替换以下注释以评估和执行Java测试

String solution = “a=1;”;
solution += “b=1;”;

String problem = “self.assertEqual(a,1);”;
problem += “c=3;”;
problem += “self.assertEqual(b,2);”;

//eval the solution string
//eval the problem string possibly wrapped by additional junit or other Java code.
//results = Run all the tests
System.out.println(“Test       expected     received   result”);
//For result in results
//  print test, expected, received, result(pass/fail)
期望输出:

Test                   expected  received  result
self.assertEqual(a,1)  1         1         pass
self.assertEqual(b,2)  2         1         fail

理想情况下,上述问题字符串中可以包含任意数量的测试,解决方案字符串中可以包含任意数量的Java语句,以便通过问题字符串中包含的测试。

据我所知,您不能。在运行时编译Java代码需要访问应用程序引擎上不可用的API;这就是为什么BeanShell之类的东西不支持Java。

在BeanShell中设置setStritJava(true)怎么样?您认为这足以教授Java语法的一大部分吗?你知道GAE有什么限制吗?对不起,我不熟悉beanshell,所以我不是合适的人选。唯一重要的约束是类白名单,以及无法运行命令(如javac)。谢谢Nick。我可以在beanshell的LotusRepls中运行setStritJava(true),并确保遵守java语法。看起来我还可以导入静态org.junit.Assert.*;是否有任何体系结构原因导致我无法获得Assert.assertEquals(x,y);在Java版本的GAE下运行?我不知道。问题仅仅在于能否在AppEngine上将Java源代码编译成字节码。如果你对beanshell这样的语言感到满意,而beanshell并不需要这样的语言,那么你应该很好。