1.在文件夾跑java RunTest.java 是OK的,進入到eclipse里面,同樣的代碼,會報錯ClassNotFound
public class RunTests
{
public static void main(String[] args)
throws Exception
{
// 處理MyTest類
ProcessorTest.process("MyTest");
}
}
package chapter14;
import java.lang.reflect.*;
public class TestProcessor
{
public static void process(String clazz)
throws ClassNotFoundException
{
int passed = 0;
int failed = 0;
// 遍歷clazz對應的類里的所有方法
for (Method m : Class.forName(clazz).getMethods())
{
// 如果該方法使用了@Testable修飾
if (m.isAnnotationPresent(Testable.class))
{
try
{
// 調用m方法
m.invoke(null);
// 測試成功,passed計數器加1
passed++;
}
catch (Exception ex)
{
System.out.println("方法" + m + "運行失敗,異常:"
+ ex.getCause());
// 測試出現異常,failed計數器加1
failed++;
}
}
}
// 統計測試結果
System.out.println("共運行了:" + (passed + failed)
+ "個方法,其中:\n" + "失敗了:" + failed + "個,\n"
+ "成功了:" + passed + "個!");
}
}
package chapter14;
public class MyTest {
@Testable
public static void m1(){}
public static void m2(){}
@Testable
public static void m3(){
throw new RuntimeException("Boom");
}
public static void m4(){}
@Testable
public static void m5(){}
public static void m6(){}
@Testable
public static void m7(){
throw new RuntimeException("Crash");
}
public static void m8(){}
}
package chapter14;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Testable {
}
說我的MyTest不存在。搜了一下,是package的問題,className沒有寫全。
要在className前面加上packge:
package chapter14;
public class RunTests {
public static void main(String[]args)
throws Exception
{
TestProcessor.process("chapter14.MyTest");
}
}
參考:
https://ask.csdn.net/questions/203230
