作为对Java面向对象编程的介绍的一部分,我们进行了大量(20-36小时)的实践练习 - 今年基于Tetris。学生遵循指导说明 - 通过文本描述和uml类图 - 如何实现他们的游戏。连接到本指南是一个运行一套单元测试(使用TestNg编写)的工具,以检查它们的实现是否符合说明。单元测试使用100%符合的代码版本进行预编译,并通过显示测试结果的自定义用户界面启动。执行的测试次数取决于学生已经达到的部分。如何在Java编译时链接Exception类
单元测试类的所有结构以类似的方式:
public static void classExists(String fullClassName) {
try {
@SuppressWarnings("unused")
Class<?> clazz = Class.forName(fullClassName);
} catch (ClassNotFoundException cnfe) {
fail(fullClassName + " could not be found on the classpath.");
}
}
测试类存在
如果(1)成功:测试类能见度
如果(2)成功:测试方法/属性存在
如果(3)成功:测试的方法的功能
这非常适用,除了延伸异常,如果当我们要测试的一类(4),我们写出:
BloxException be = new BloxException("Message",value);
测试按预期工作,特别是如果BloxException不存在,测试(1)失败,其他检查不执行,但是,如果我们试图抛出异常:
throw new BloxException("Message", value);
测试是n没有执行,因为TestNg找不到类BloxException。 我们推测这是由于Java如何编译上面的两行,任何人都可以告诉我为什么抛出异常时我们需要该类,但是如果我们创建一个新的异常,我们不需要代码来执行测试?
这里是异常堆栈跟踪仅使用throw新BloxException时出现:
java.lang.NoClassDefFoundError: fr/eseo/blox/model/BloxException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2436)
at java.lang.Class.privateGetPublicMethods(Class.java:2556)
at java.lang.Class.getMethods(Class.java:1412)
at org.testng.internal.TestNGClassFinder.<init>(TestNGClassFinder.java:59)
at org.testng.TestRunner.initMethods(TestRunner.java:409)
at org.testng.TestRunner.init(TestRunner.java:235)
at org.testng.TestRunner.init(TestRunner.java:205)
at org.testng.TestRunner.<init>(TestRunner.java:153)
at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:522)
at org.testng.SuiteRunner.init(SuiteRunner.java:157)
at org.testng.SuiteRunner.<init>(SuiteRunner.java:111)
at org.testng.TestNG.createSuiteRunner(TestNG.java:1273)
at org.testng.TestNG.createSuiteRunners(TestNG.java:1260)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1114)
at org.testng.TestNG.run(TestNG.java:1031)
at fr.eseo.ac20.core.validation.runners.Validator.<init>(Validator.java:131)
at fr.eseo.ac20.core.validation.runners.CustomValidator.<init>(CustomValidator.java:21)
at fr.eseo.ac20.core.validation.runners.CustomValidator.main(CustomValidator.java:17)
Caused by: java.lang.ClassNotFoundException: fr.eseo.blox.model.BloxException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 19 more
这样的帮助,我已经创建了两个简单的测试案例显示是怎么回事,他们都可以从下载examples.zip。解压缩文件,并从命令行变化到tng_good文件夹,并执行
java -cp testng-6.0.1.jar:. org.testng.TestNG tng.xml
然后改变到tng_bad文件夹,并执行相同的
java -cp testng-6.0.1.jar:. org.testng.TestNG tng.xml
第一执行时,与存在测试失败,第二给出了例外。 (测试方法的代码源位于示例子文件夹内)
这大多是没有意义的。无论是否抛出异常,您都有完全相同的*实例创建表达式*,无论上下文如何,其计算结果都完全相同。 –
向我们展示来自TestNg的堆栈跟踪,显示您正在讨论的行为。 –
我不认为这是例外情况。你确定类文件是否在正确的位置,并且名称在需要的地方正确输入? – user2357112