单元测试CacheManager

koe*_*tsu 5 testing unit-testing

我有这个CacheManager类,它保存一个包含各种缓存数据的静态字典.但是,由于这个字典是静态的,它会被其他单元测试中的数据填满.这使我无法进行单元测试,无论Cache在初始化时是否为空,并且违反了单元测试的原则.

任何想法如何为此创建一个适当的单元测试?

public class CacheManager
{
   private static readonly Dictionary<ICacheKey, ListCacheItem> cacheEntries =
       new Dictionary<ICacheKey, ListCacheItem>();

   public static Dictionary<ICacheKey, ListCacheItem> CacheEntries
   {
       get
       {
           lock (cacheEntries)
           {
               return cacheEntries;
           }
       }
   }
Run Code Online (Sandbox Code Playgroud)

dyr*_*oss 1

一般来说,从测试的角度来看这不是一个好主意。通过将成员设置为CacheManager静态,您将永远无法以适合单元测试的方式隔离它。

也许更好的解决方案是单例模式。为此,请删除CacheManager的成员上的 static 修饰符。然后,您可以在您的应用程序中拥有一个供其他人使用的静态实例。因此,在单元测试中,您可以创建该类的一个新实例,您可以单独测试该实例,但仍然具有所需的功能。