Nunit скрипт для проверки данных кеша - PullRequest
0 голосов
/ 11 июля 2011

Я пытаюсь написать пример тестового скрипта 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 (): SetUp: System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.

Не могли бы вы мне помочь?

Ответы [ 2 ]

1 голос
/ 11 июля 2011

При тестировании кода, привязанного к HttpContext, вы должны полагаться на абстракции и использовать поддельный / заглушенный контекст http.См. этот вопрос для получения дополнительной информации по теме.

К сожалению, объект кэша (и класс Cache) невозможно легко подделать, так как это закрытый класс.Для этого нужно создать класс-оболочку с соответствующим интерфейсом вокруг объекта Cache и подделать / заглушку / макет в вашем тесте.

Вы можете получить доступ к классу Cache вне веб-приложения, но в этом случаеВы, вероятно, не хотите этого делать.Доступ к кешу может быть сделан путем ссылки на сборку System.Web и использования класса HttpRuntime.

using System.Web;
using System.Web.Caching;
…
Cache cache = HttpRuntime.Cache;
1 голос
/ 11 июля 2011

NUnit не работает в веб-контексте, поэтому HttpContext.Current равно нулю.Вам нужно будет создать контекст we вручную, если вы хотите проверить это.

Вы можете создать фиктивный класс для вашего httpcontext.Пожалуйста, Google mock httpcontext, и вы найдете несколько ссылок, которые могут быть полезны для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...