2016-12-20 17 views
2

I持っているクラスBridgeMapsJUnitの:と主張する方法を取得クラスインスタンス

public class BridgeMaps { 
    private static final BridgeMaps INSTANCE = new BridgeMaps(); 

    private Map<String, String> docTypeMap; 
    private Map<String, String> docBaseMap; 
    private Map<String, String> tempFolderIdMap; 
    //.... 

    //constructor for the class to initialize the Maps  
    private BridgeMaps(){ 
     docTypeMap = new HashMap<String, String>(); 
     docBaseMap = new HashMap<String, String>(); 
     docBaseMap = new HashMap<String, String>(); 
     //....rest of the code 

    } 


    //Get the class instance 
    //@return BridgeMaps - Returns the BridgeMaps Instance 
    public static final BridgeMaps get(){ 
     return INSTANCE; 
    } 
} 

そして私はとJUnitテストケースを書いた:

public class BridgeMapsTest { 

    private static BridgeMaps bridgeMaps; 
    @BeforeClass 
    public static void setUpBeforeClass() throws Exception { 
     Constructor<BridgeMaps> b = BridgeMaps.class.getDeclaredConstructor(new Class[0]); 
     b.setAccessible(true); 
     bridgeMaps = b.newInstance(new Object[0]); 
    } 

    @Test 
    public void testGet() { 
     //("Not yet implemented"); 
    } 
} 

しかし、私が主張する内容がわかりません:

assertWhat(bridgeMaps.get());

どのように私はクラスのインスタンスを主張することができますtestGet()メソッドで?

ご協力いただければ幸いです。ありがとうございました。

+0

実際にテストする必要はありませんが、私はソナースキャンの重要な問題を修正するためにそれをやっています。 'nonNull(BridgeMaps.class)'で私を明確にしてもらえますか? –

+0

ありがとうございました。問題はプライベートコンストラクタにあり、 'cacheUtil =(CacheUtil)ApplicationContextProvider.getApplicationContext()。getBean(" cacheUtil "、CacheUtil.class);'行がコメントアウトされたときに 'assertThat(BridgeMap .get()、is(notNullValue(BridgeMaps.class))); 'うまくいった! –

+0

幸せそうでした! :)) –

答えて

1

私はassertThatを使用することをお勧めします。

このアサーションは、notNullValue()のようなHamcrestマッチャーで動作します。あなたはこのようなあなたのアサートを書き換えるために許可

assertThat(BridgesMap.get(), notNullValue(BridgeMaps.class)) 

このコードは、null以外の値を返すということ静的なgetメソッドを呼び出すことを主張します。

つまり、この呼び出しはctorを起動し、そのコードの背後にあるすべてのコードを実行します。そして、あなたはあなたのシングルトンが「真実」であり、ヌルではないことを保証することができます。アクセス時に例外が発生します。

0

使用assertSame(a,b)

は、2つのオブジェクトが同じオブジェクトを参照すると主張しています。

また、その反射式ポケリーの代わりにassertSame(bridgeMaps.get(), bridgeMaps.get())を実行することも考慮してください。

+0

私はリフレクションを使わずに作成しますが、コンストラクタはプライベートです。私はそんなことはできないのですか?私はできますか?私が間違っているなら、私を訂正してください。 –

+0

別の静的メソッドを作成します。パッケージのスコープ。 static final BridgeMaps create(){ 新しいBridgeMaps()を返します。 } これを使用してINSTANCEを作成し、単体テストからcreate()を使用します。 – roby

関連する問題