dart lang中的注释/元数据

时间:2014-11-08 21:05:36

标签: java annotations dart metadata

任何人都可以帮助将以下JAVA转换为DART ......

我试图理解注释,在DART中找不到足够的文档,并找到了这个JAVA示例here;试图将其转换为DART但失败了:(

Test.java

      
  package com.mkyong.test.core; 
  import java.lang.annotation.ElementType;
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
  import java.lang.annotation.Target;

  @Retention(RetentionPolicy.RUNTIME)
  @Target(ElementType.METHOD) //can use in method only.
  public @interface Test {

      //should ignore this test?
      public boolean enabled() default true;
  }

TesterInfo.java

package com.mkyong.test.core;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) //on class level
public @interface TesterInfo {

 public enum Priority {
   LOW, MEDIUM, HIGH
}

Priority priority() default Priority.MEDIUM;

String[] tags() default "";

    String createdBy() default "Mkyong";
   String lastModified() default "03/01/2014";

 }

TestExample.java

package com.mkyong.test;

import com.mkyong.test.core.Test;
import com.mkyong.test.core.TesterInfo;
import com.mkyong.test.core.TesterInfo.Priority;

@TesterInfo(
 priority = Priority.HIGH, 
 createdBy = "mkyong.com",  
 tags = {"sales","test" }
 )
 public class TestExample {

@Test
void testA() {
  if (true)
    throw new RuntimeException("This test always failed");
}

@Test(enabled = false)
void testB() {
  if (false)
    throw new RuntimeException("This test always passed");
}

@Test(enabled = true)
void testC() {
  if (10 > 1) {
    // do nothing, this test always passed.
  }
}

}

RunTest.java

package com.mkyong.test;

 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;

  import com.mkyong.test.core.Test;
  import com.mkyong.test.core.TesterInfo;

  public class RunTest {

  public static void main(String[] args) throws Exception {

  System.out.println("Testing...");

  int passed = 0, failed = 0, count = 0, ignore = 0;

   Class<TestExample> obj = TestExample.class;

   // Process @TesterInfo
   if (obj.isAnnotationPresent(TesterInfo.class)) {

    Annotation annotation = obj.getAnnotation(TesterInfo.class);
    TesterInfo testerInfo = (TesterInfo) annotation;

    System.out.printf("%nPriority :%s", testerInfo.priority());
    System.out.printf("%nCreatedBy :%s", testerInfo.createdBy());
    System.out.printf("%nTags :");

    int tagLength = testerInfo.tags().length;
    for (String tag : testerInfo.tags()) {
        if (tagLength > 1) {
            System.out.print(tag + ", ");
        } else {
            System.out.print(tag);
        }
        tagLength--;
    }

    System.out.printf("%nLastModified :%s%n%n", testerInfo.lastModified());

    }

    // Process @Test
    for (Method method : obj.getDeclaredMethods()) {

    // if method is annotated with @Test
    if (method.isAnnotationPresent(Test.class)) {

        Annotation annotation = method.getAnnotation(Test.class);
        Test test = (Test) annotation;

        // if enabled = true (default)
        if (test.enabled()) {

          try {
            method.invoke(obj.newInstance());
            System.out.printf("%s - Test '%s' - passed %n", ++count, method.getName());
            passed++;
          } catch (Throwable ex) {
            System.out.printf("%s - Test '%s' - failed: %s %n", ++count, method.getName(), ex.getCause());
            failed++;
          }

        } else {
            System.out.printf("%s - Test '%s' - ignored%n", ++count, method.getName());
            ignore++;
        }

    }

   }
    System.out.printf("%nResult : Total : %d, Passed: %d, Failed %d, Ignore %d%n", count, passed, failed, ignore);

    }
 }

上面的输出应该是:

  

...测试

     

优先级:HIGH   CreatedBy:mkyong.com   标签:销售,测试   LastModified:03/01/2014

     

1 - 测试&#39; testA&#39; - failed:java.lang.RuntimeException:此测试总是失败   2 - 测试&#39; testC&#39; - 过去了   3 - 测试&#39; testB&#39; - 忽略

     

结果:总计:3,通过:1,失败1,忽略1

1 个答案:

答案 0 :(得分:2)

我没有仔细查看代码及其功能,但注释

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) //can use in method only.

在Dart中没有对应物。在dart中,每个常量值都可以作为注释应用于允许注释的每个地方。

关于在Dart中使用注释的一些问题/答案

查看标记dart-mirrors了解更多信息。

有关在Dart https://www.dartlang.org/articles/dart-unit-tests/

中编写单元测试的信息