C# 单例模式的单元测试?

C# 单例模式的单元测试?,c#,unit-testing,singleton,moq,system.reflection,C#,Unit Testing,Singleton,Moq,System.reflection,假设我正在使用一个包含类a和B的包p1。我无权访问包p1的实现 现在,在我的应用程序中,我在任何时候都只需要一个实例 我在我的应用程序中为类a创建了一个单例类C 样本: public Class ClassC { private static readonly ClassA singletonObj = new ClassA(); private ClassC(); public static ClassA ClassC { get

假设我正在使用一个包含类a和B的包p1。我无权访问包p1的实现

现在,在我的应用程序中,我在任何时候都只需要一个实例

我在我的应用程序中为类a创建了一个单例类C

样本:

public Class ClassC
{
    private static readonly ClassA singletonObj = new ClassA();

    private ClassC();

    public static ClassA ClassC
    {
       get
       {
          return singletonObj;
       }
    }
}

如何在类C上进行单元测试以确保为我的应用程序创建了单个实例?

如果您希望类a是单例的,那么您上面的代码是无关的。 您应该这样编写类A:


为了测试单音,请尝试在代码中创建几个ClassA实例。好的结果是,每次创建新实例时,您都会得到相同的实例,这意味着-您可以有两个实例具有duffrent数据-它们都是指向相同实例的指针。

您是否混淆了C和A?这甚至不是一个单身汉。没有什么能阻止我叫新的ClassA;在某个地方。是的,但我没有访问类A的权限,但我需要施加一个约束的单个实例。所以,我是通过C来实现的,但我如何测试C。我见过一些IOC和反射的例子,但我不能清楚地理解它们。如果没有对ClassA的授权,你不能施加这种约束。你不能让任何一个类从外部成为一个单独的类。我理解这一点,但这只是一个特定的要求。我将如何测试上面的C类。有什么想法吗?你到底想测试什么?这个类不是一个单实例,如果您的要求是绝对保证只有一个classA实例存在于您的程序中,那么您必须找到另一种方法。尝试在代码中创建几个classA实例如何在构造函数声明为私有时创建新实例@Inbali你的意思是多次调用ClassA.Instance吗?是的,但我没有访问ClassA的权限,但我需要施加一个约束的单个实例。所以,我是通过C来做的,但是我怎么能测试C。我看过一些IOC和反思的例子,但我不能清楚地理解它们。我不明白……如果你不能进入A级,那么它怎么能成为C级的一员呢?或者你没有访问classA代码的权限?如果您没有访问classA代码的权限,则无法将该类设置为单例。也许您应该尝试在所有项目类中的任何类/可共享类之外使用const bool,这将指示是否创建了classA的第一个实例。在您的程序中,每次尝试创建新实例时,在构造函数中检查此标志&您将知道createnewclassa&chnageflage是否为false或返回指向创建实例的指针。谢谢,我最后做了类似的事情!
public Class ClassA
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }


//Any other function & members related to ClassA

}