2016-07-31 13 views
-2

ビジネスロジックに使用されているJavaクラス用のJUnitテストケースを記述し、AEMと対話する必要があります。私はJUnitのテストケースを書くための適切な文書を見つけられません。そのような文書があれば、私に知らせてください。AEM6.2でJavaクラスのJunitテストケースを書く方法

+0

このリンクを確認してください。初心者には非常に便利です:http://www.wemblog.com/2016/12/how-to-write-tests-in-aem.html –

答えて

0

ここであなたが探しているものがわかりません。 AEMクラスのJunitテストケースは、Javaクラスの記述と同じです。必要に応じて、Slingオブジェクトをモックするための模擬フレームワークが必要な場合があります。

OSGIとスリングクラスのモックの周りの詳細はhere

のサンプルコードサンプルWCMUsePojoクラスでapacheのスリングサイトhereに説明されている - Mockitoを使ってユニットテストに

public class DisplayAsDataSourceWcmUse extends WCMUsePojo { 


    /** 
    * Display as script regex. 
    */ 
    private static final String DISPLAY_AS_REGEX_EXPR = "^displayAs\\_(.*)\\.html$"; 

    /** 
    * Datasource to the display listing. 
    */ 
    private DataSource dataSource; 

    /** 
    * activate method. 
    * 
    * @throws Exception 
    */ 
    @SuppressWarnings("PMD.SignatureDeclareThrowsException") 
    @Override 
    public final void activate() throws Exception { 
     this.buildDisplayAsOptions(); 
    } 

    /** 
    * Build the list of views for the DisplayAs Option. 
    */ 
    private void buildDisplayAsOptions() { 
     final SlingHttpServletRequest request = getRequest(); 
     final Resource componentResource = getCurrentComponent(); 
     List<Resource> resourceList = Collections.emptyList(); 

     if (null != componentResource) { 
      final Iterable<Resource> children =() -> componentResource.listChildren(); 
      final Stream<Resource> childResourceStream = StreamSupport.stream(children.spliterator(), false); 

      resourceList = childResourceStream 
        .filter(resource -> resource 
          .getName().matches(DISPLAY_AS_REGEX_EXPR)) 
        .map(this::getMappedResource) 
        .collect(Collectors.toList()); 
      childResourceStream.close(); 
     } 

     if (resourceList.isEmpty()) { 
      dataSource = EmptyDataSource.instance(); 
     } else { 
      dataSource = new SimpleDataSource(resourceList.iterator()); 
     } 

     // place it in request for consumption by datasource mechanism 
     request.setAttribute(DataSource.class.getName(), dataSource); 

    } 

    /** 
    * Get resource instance of current component i.e. resource with path to component under apps/. 
    * 
    * @return component resource. 
    */ 
    private Resource getCurrentComponent() { 
     final Resource listResource = getResourceResolver().getResource((String) getRequest().getAttribute(Value 
       .CONTENTPATH_ATTRIBUTE)); 
     if (listResource != null) { 
      return getResourceResolver().getResource(listResource.getResourceType()); 
     } 
     return null; 
    } 

    /** 
    * Get Mapped Synthetic resource corresponding to the Display View. 
    * 
    * @param resource - Resource instance of display script. 
    * @return ValueMapResource transformation of display script. 
    */ 
    @SuppressWarnings("unused") 
    private ValueMapResource getMappedResource(final Resource resource) { 
     final String value = resource.getName().replaceFirst(DISPLAY_AS_REGEX_EXPR, "$1"); 

     // see if there's a better label 
     final String text = ResourceUtil.getValueMap(resource).get(JcrConstants.JCR_TITLE, value); 

     // create a ValueMap 
     final Map<String, Object> map = new HashMap(); 
     map.put("text", text); 
     map.put("value", value); 

     // return a synthetic resource 
     return new ValueMapResource(getResourceResolver(), new ResourceMetadata(), "", new ValueMapDecorator(map)); 

    } 

    /** 
    * Getter for dataSource. 
    * 
    * @return Datasource. 
    */ 
    public final DataSource getDataSource() { 
     return dataSource; 
    } 
} 

可能な方法の1つ(あまり理想的ではありませんが、そのような場合は統合テストが最適です) -

@RunWith(MockitoJUnitRunner.class) 
public class DisplayAsDataSourceWcmUseTest { 

    @Mock 
    private Bindings bindings; 
    @Mock 
    private Resource currentResource; 
    @Mock 
    private Resource componentResource; 
    @Mock 
    private ResourceResolver resourceResolver; 
    @Mock 
    private SlingHttpServletRequest request; 
    @Mock 
    private Iterator<Resource> childItr; 
    @Mock 
    private Resource displayAsOne; 
    @Mock 
    private Resource displayAsTwo; 

    @InjectMocks 
    private DisplayAsDataSourceWcmUse displayAsDataSourceWcmUse; 

    @Before 
    public void setup() { 

     when(bindings.get("resource")).thenReturn(currentResource); 
     when(bindings.get("request")).thenReturn(request); 
     when(request.getResourceResolver()).thenReturn(resourceResolver); 
     when(request.getAttribute(Value.CONTENTPATH_ATTRIBUTE)).thenReturn("list/component/instance"); 

     when(currentResource.getResourceType()).thenReturn("current/resource/type"); 
     when(resourceResolver.getResource("current/resource/type")).thenReturn(componentResource); 
     when(resourceResolver.getResource("list/component/instance")).thenReturn(currentResource); 

     List<Resource> childRes = new ArrayList<>(); 
     childRes.add(displayAsOne); 
     childRes.add(displayAsTwo); 

     when(componentResource.listChildren()).thenReturn(childRes.iterator()); 
     when(displayAsOne.getName()).thenReturn("displayAs_One.html"); 
     when(displayAsTwo.getName()).thenReturn("displayAs_Two.html"); 

     Map<String, Object> vm1 = new HashMap(); 
     vm1.put(JcrConstants.JCR_TITLE, "Display Type One"); 

     when(displayAsOne.getValueMap()).thenReturn(new ValueMapDecorator(vm1)); 
     when(displayAsTwo.getValueMap()).thenReturn(new ValueMapDecorator(new HashMap())); 

    } 

    @Test 
    public void test_display_option_are_set() throws Exception{ 
     displayAsDataSourceWcmUse = new DisplayAsDataSourceWcmUse(); 
     displayAsDataSourceWcmUse.init(bindings); 

     assertTrue(displayAsDataSourceWcmUse.getDataSource() instanceof SimpleDataSource); 
    } 

    @Test 
    public void test_empty_datasource_is_set() throws Exception{ 

     List<Resource> childRes = new ArrayList<>(); 
     when(componentResource.listChildren()).thenReturn(childRes.iterator()); 

     displayAsDataSourceWcmUse = new DisplayAsDataSourceWcmUse(); 
     displayAsDataSourceWcmUse.init(bindings); 

     assertTrue(displayAsDataSourceWcmUse.getDataSource() instanceof EmptyDataSource); 
    } 

} 
0

'ContiPerf 2'をご覧ください。

ContiPerfは、JUnit 4テストケースをパフォーマンステストとして簡単に活用できるようにする軽量テストユーティリティです。継続的なパフォーマンステストのために。これは、注釈付きのJUnit 4の簡単なテスト構成でパフォーマンステストのためのユニットテストを包むのJUnitPerfのアイデアに触発されていますが、より強力かつ簡単に使用する:

  • テスト実行characterisiticsと性能要件を定義するためのJavaアノテーションを使用しました。
  • テストにマークを付けると、特定の回数実行したり、一定の時間繰り返し実行したりすることができます。
  • パフォーマンス要件は、最大、平均、中または任意のパーセンタイルの実行時間にすることができます。
  • 性能要件の完璧な制御と読みやすさ簡単な単体テストまたはパフォーマンステストとして2つの異なるモードでテストを実行できます。
  • EclipseとMavenとの容易な統合。
  • 実行要約をCSVファイルにエクスポートします。
  • 外部依存関係のない小さなライブラリ(JUnitのみ)。
  • カスタム統計情報の評価と追跡のメカニズムを備えた簡単な拡張機能。
関連する問題