2016-10-03 30 views
0

我想測試一個單例類只創建一個單一的對象。 如何測試班級。如何測試單例類只創建一個對象

下面的代碼

Singleton類: -

public class SpringApplicationContext { 

    private static ClassPathXmlApplicationContext context = null; 

    private SpringApplicationContext(){}; 

    public static ClassPathXmlApplicationContext getInstance() { 

     if (context == null) { 

      context = new ClassPathXmlApplicationContext(
        "spring.xml"); 
     } 

     return context; 

    } 

} 

調用類: -

public static void main(String[] args) { 
      ClassPathXmlApplicationContext ctx = SpringApplicationContext.getInstance(); 
    System.out.println("yup"); 
} 
+0

多次調用'getInstance'並檢查引用上的== ==是否返回true。對於複合對象,您將必須檢查單例內的每個引用類型。 – TheLostMind

+0

請注意,您的實現不是線程安全的。也就是說,兩個線程可以導致創建兩個實例。 – johnnyaug

+0

@TheLostMind - 何時會返回true。只有比較兩個參考時,它纔會返回true。 –

回答

0

您可以與的toString SYSOUT檢查對象,它打印對象的引用,所以輸出對於所有不同的對象應該是相同的。

public static void main(String[] args) { 
     ClassPathXmlApplicationContext ctx1 = SpringApplicationContext.getInstance(); 
     ClassPathXmlApplicationContext ctx2 = SpringApplicationContext.getInstance(); 

     System.out.println("yup"); 

     if(System.identityHashCode(ctx1) == System.identityHashCode(ctx2)){ 

     System.out.println("Hash code is same"); 

    } 
     } 
+0

它正在打印相同的輸出...謝謝@Navneet Rabadiya和TheLostMind ... –

+0

@RaviKumarRavanam - 如果您真的想要使用這個方法,然後檢查IdentityHashCode是否相等。 – TheLostMind

+0

這個答案是不正確的。如果該類重寫'toString()'會怎麼樣? – TheLostMind

相關問題