Nunit脚本测试缓存数据

本文关键字:数据 缓存 测试 脚本 Nunit | 更新日期: 2023-09-27 18:01:39

我正在尝试编写一个示例NUnit测试脚本来检查缓存中的值

我写了这样的代码
 [TestFixture]
class Authorization
{
    class AutherizationEntity
    {
        public int UserID { get; set; }          
        public int OperationCode { get; set; }
        public bool permission { get; set; }
    }

    [SetUp]
    public void Initialize()
    {
            //if (HttpContext.Current.Cache["UserRights"] == null) 
            //{
                List<AutherizationEntity> AuthorisationObject = new List<AutherizationEntity>();
                for (int i = 0; i < 5; i++)
                {
                    AutherizationEntity AEntity = new AutherizationEntity();
                    AEntity.OperationCode = 10;
                    AEntity.permission = true;
                    AEntity.UserID = i;
                    AuthorisationObject.Add(AEntity);
                }
                HttpContext.Current.Cache.Insert("UserRights", AuthorisationObject);  //Here i am getting the exception in NUnit
            //}
    }
    [TestCase]
    public void AuthorizeUser()
    {           
        int UserId = 1;
        int OperationCode = 10;        
        Boolean HaveRight = false;
        List<AutherizationEntity> AuthEntity = new List<AutherizationEntity>();
        AuthEntity = (List<AutherizationEntity>)HttpContext.Current.Cache.Get("UserRights");
        foreach (AutherizationEntity Auth in AuthEntity)
        {
            if ((Auth.UserID == UserId) && (Auth.OperationCode==OperationCode))
            {
                HaveRight = Auth.permission;
            }
        }
        Assert.AreEqual(HaveRight, true);
    }     
}

但是当我试图运行脚本与NUnit我得到一个异常

Authorization.AuthorizeUser ():设置:系统。NullReferenceException:对象引用没有设置为对象的实例。

你能帮帮我吗?

Nunit脚本测试缓存数据

NUnit没有在web上下文中运行,因此HttpContext.Current为null。如果你想测试,你需要手动创建一个we上下文。

您可以为您的httpcontext创建一个模拟类。请用谷歌搜索mock httpcontext,你会找到一些可能对你有用的链接。

当测试绑定到HttpContext的代码时,你必须依赖抽象并使用假的/存根的http上下文。有关该主题的更多信息,请参阅此问题。

不幸的是,缓存对象(和缓存类)不容易伪造,因为它是一个密封类。方法是在缓存对象周围创建一个带有相应接口的包装器类,并在测试中使用/stub/mock。

你可以在web应用程序之外访问缓存类,但在这种情况下,你可能不想这样做。可以通过引用System来访问缓存。Web组装和使用HttpRuntime类。

using System.Web;
using System.Web.Caching;
…
Cache cache = HttpRuntime.Cache;