2016-10-03 69 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

相关问题