2016-09-28 16 views
0

私は、プロビジョニングVMのようなAzureのARMメソッドに取り組んでおり、java sdkを使ってすべてのVMをリストしています。私はmockitoを使ってメソッドをテストしたい。紺碧への元の呼び出しをせずにどうすればいいですか?mockitoを使用してAzure ARM APIをテストする方法は?

public class ListAllVM{ 
    public static Azure azure = null; 
    public void listAllVM() { 
    azure = getAuthentication(); 
    try { 
     int i = 0; 
     for (VirtualMachine VM : azure.virtualMachines().list()) { 
      System.out.println(++i + 
        " \n VM ID:-" + VM.id() + 
        " \n VM Name:-" + VM.name() + 
        "\n"); 
     } 
    } catch (CloudException | IOException | IllegalArgumentException e) { 
     log.info("Listing vm failed");  } 
    } 
} 

VMのモックリストを取得中に問題が発生しています。外部APIクラスを模擬する方法。

+0

Iちょうどn個あなたは私の答えに戻って来なかったことを耳にしました。私はそれをupvote /あなたの目に合うように受け入れるために何かをすることができれば教えてください。 – GhostCat

答えて

0

あなたの問題がある:あなたがコードをテストするためにハードを書いた - 静的と新しいを使用することによって。違うことを行うにはどのように迅速な提案:私のバージョンで

public class AzureUtils { 
    private final Azure azure; 

    public AzureUtils() { this ( getAuthentication(); } 
    AzureUtils(Azure azure) { this.azure = azure }; 

    public List<VM> getVms() { 
    return azure.virtualMachines.list(); 
    } 

、あなたはAzure.classの嘲笑バージョンを挿入依存性注入を使用することができます。今では、どんな種類のフレームワーク(EasyMockやMokitoのような)を使ってAzureオブジェクトを提供することができます。

レコードの場合:コードが取得されている場所がわからないgetAuthentication() from:これは静的なインポートでない限りです。最初にコードに問題があります。

他の言葉:書く方法を学びたいテスト可能コード;例えば、これらを見て、videos

一方、1つのコメントは、Azureクラスは最終的であると言います。そのコンストラクタはプライベートです。うまく、完全に公正です:を使用してAPIを設計するときは、意図を表現するための強力なツールです。上に書いたよう

  • :そこから来る

    、あなたは実際にはかなり限られていると、あなたはAzureUtilsのような抽象化を作成する - あなたは、少なくともすることにより、設計上の決定から影響から独自のコードを遮蔽することができるこの方法をマイクロソフト

  • あなたはPowerMock(ITO)に変わり、最終的なクラス
  • をあざけることができますMockito内に新しい実験的な機能を有効にするか、JMockit
+0

Azureクラスはfinalで、プライベートコンストラクタを持ち、静的コンテキストでのみ使用されます。なぜマイクロソフト?どうして? – DRaehal

+0

@DRaehalああ、よく。多くの人が、** final **を使用することは、APIを作成するときには良いことだという主張をしています。なぜなら、APIを使用するときに意図を明確にするからです。それに応じて私の答えを更新しました。あなたの目の中で答えが多分upvoteに合っているかどうか教えてください。 – GhostCat

関連する問題