需要帮助构建测试框架

时间:2013-10-08 14:48:13

标签: java testing groovy frameworks

最近我试图建立一个像TestNG这样的框架,但却发现了Launcher的事情(我不知道它是Launcher问题还是其他只是猜测)。所以这就是我所做的。

  1. 首先,我创建了一个名为Test
  2. 的自定义注释
  3. 用main方法编写了一个测试注释的实现类(现在我只针对一个注释)
  4. 在主要的实现方法类中,我编写了读取xml的代码(这样我可以获取类名并使用反射,我正在使用Test注释检查类的方法并调用它)。
  5. 现在我用带有测试注释的方法编写了另一个类,并在xml文件中提到了类名。现在,当我们使用testng时,我们可以选择将该方法/类作为 TestNG 运行。
  6. 但在我的情况下,我不知道如何运行我的类,因为没有主要的方法。
  7. 所以我在这一点上受到了打击。请建议我应该做什么。如果我们需要Launcher,请告诉我们如何创建启动器或任何包含Launcher信息的tutuorial / Book / weblink。
  8. *注意:我知道如果我们使用注释,我们不需要XML文件。但是对于简化的事情,我稍后会从XML获取类名,我将丢弃XML。

    先谢谢。

    这是我的测试Annoatation

    package com.annoatation;

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(value=ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Test {
    
    }
    

    这是我使用Annaotation的课程:

    package com.annoatation;
    
    public class TestExample{
        @Test
        public void sampleMethod()
         {
            System.out.println("This is sample method");
        }
        @Test
        public void sampleMethod1()
        {
                System.out.println("This is sample method 1");
        }
    
    }
    

    这是我的主要班级:

    package com.annoatation;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class Main {
        public static void main(String[] args) {
            TestExample example=new TestExample();
            Method[] method=example.getClass().getMethods();
            for(Method methods:method)
            {
                Test test=methods.getAnnotation(com.annoatation.Test.class);
                if(test!=null)
                {
                    try {
                        methods.invoke(example);
                    } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
           }
    
        }
    
    }
    

    我希望当我单击“在My TestExample类上运行”时,它应该自动调用主类的主要方法。 我不确定我们在java中说这个东西(可能是入口点)

1 个答案:

答案 0 :(得分:0)

使用反射创建类的实例并调用带注释的方法:

Class classDefinition = Class.forName(className);
object = classDefinition.newInstance();

Method method = classDefinition.getMethod("methodName");
method.invoke(object);