Is there a way to mock/fake the session object in ASP.Net Web forms when creating unit tests? I am currenclty storing user details in a session variable which is accessed by my business logic. When testing my business logic, in isolation, the session is not available. This seems to indicate a bad design (though im not sure). Should the business logic layer be accessing session variables in the first place?
If so, then how would I go about swapping the user details with a fake object for testing?
In the VS2005 environment, when I test my session to make sure the page redirects to the main page (itself) if the session is null, it works. There is no error.
The function I use for this is:
However, when it is in the production environment in IIS 6.0, when the session has timed out, and I then do a postback by doing some slider control, I see the page reload but immediately thereafter, it throws a Server Error exception of : Object reference not set to an instance of object.
however, why is it that the Slider1_TextChanged event fired even even after during page_load, the page was told to do a response.direct ?? shouldn't the entire page have gone through a full-page refresh life cycle ? why did it continue on to attempt to raise the Slider1_TextChanged event?
I want to be able to persist data across a session but do this outside of the built-in session state object. Why is a long story that I will not go into here. I just need to know where I can put data other than in the session object that will persist across the specific session.
I need to fake HttpContext.Current.Application table to access it from my unit tests.I need to store my data somewhere. I thought that I can just pass instance of NameValueCollectionBase but as I descover this base type has no indexer so it's too complicated to use. So what about faking this part of HttpContext? Is it possible? How can I make it? Will be NUnit.
I remember doing something like this in a CMS i used few years ago.. not sure what it was called or considered. Maybe its url aliasing, but not sure but here is what im trying to accomplish, based on the url / post data passed that a physical location is returned to our application.
So the url will always be unique to the request, but it will never be a valid url that will display anything..
The concept here is that we have the following structure.. We have the C# code that will initiate a HTTP request of a file (test.dat) IIS7 already has a handler setup for that file, when it receives that request, it does a DB lookup and returns the physically location on the server for our application to use.
So is there a way to send a fake http request to our server so that the custom handler is triggered Im not sure if i explained this correctly, but hopefully i did..
The application we are working on is a custom video playback app, IIS has been setup with the handler for the .dat file we are working with.. the video playback will need the entire physical path in order to play.. as far as the site is concerned, it just needs to initiate the request..
[URL] would be an exaple of the request.. but somehow passing along in the background video specific information in order to return the correct path.
I would like to use the theme system of asp.net so the styles, images and masterpages can be set in a subfolder like so "/Sites/Site01/Themes/ThemeName/MasterPage.master".
All the styles CSS file will be inside of the custome folder including images. How do i make my webproject to read the good location of each of my websites? And how can i make the images work "path" when inserted in the master page?
I am using Session state in my ASP.NET application. The development is done using InProc session state as the option, but now the application is deployed on a Web Farm(Cluster) environment. As a result, InProc session state is not working.
I have changed the session state mode to SQL server so the session state will work in Web Farm environment. But now i am getting a different error because of some of the objects which i have already used with Session.
Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.
I understand that every object that is stored in Session needs to be serialized. But there are some objects which are not serializble in DOTNET.
Unfortunately i am using one of them, SiteMapNode. I am storing this object in session to re-create the breadcrumb based on the navigation the user has performed. I have to do this because there are mulitiple paths leading to single page in my application.
I have tried to do serialization of this object using XML serializer object, but its throwing an exception:
"System.Web.SiteMapNode cannot be serialized because it does not have a parameterless constructor."
I can't change the code of storing the SiteMapNode in session as it is very complex and written by someone else. I have to store this object in session or some other state form so that i can continue using the same code.
creating session object to use across my web application.
I'm working on an application that requires a login control upon which we would need to set around 10 different session variables (related to the user). These values are required/ used many times across the web application so it would be really handy to create a class/ object which can be accessed in all pages with doing multiple lookups into the user table on DB. Also, I would like to avoid any conflicts with multiple developers using same session variable names and thereby causing issues down the road.
I know this is not a new kind of request and must have been created and used by many of the developers.
but this doesn't seem to work.Should I change my headers in the .ashx to server image headers? Can this work using this method?
I emailed myself with an email, other images displayed properly. There was no log in the database for the handler (the handler logs all requests to the db). Calling the URL to the file in the browser logs to the db, so its working.
I am getting thid error Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Source Error:
I want to mock ASP.NET 3.5 behavior in order to unit test my WebControls: I want to test how they perform with mock data with existing system of events. Basically I want to test generated result HTML based on input mock data. How to do it? I looked into NMock, but it doesn't suit my needs for 2 reasons:
It just runs ASP.NET server in separate process in order to get resulting HTML; My WebControls output HTML as a text on render, so there are elements which do not correspond to any ASP.NET control (except LiteralControl in some cases). Also, I have huge legacy system, so rewriting everything for MVC won't work for me (too much job), I need to write unit tests to existing controls.
I've made a custom model, and I want to mock it. I'm fairly new to MVC, and very new to unit testing. Most approaches I've seen create an interface for the class and then make a mock that implements the same interface. However I can't seem to get this to work when actually passing the interface into the View. Cue "simplified" example:
Upon a HttpPost I get a "Cannot create an instance of an interface" exception. I seems that I can't have my cake (passing a model) and eat it (pass mock for unit testing). Maybe there's a better approach to unit testing models bound to views?
I know that this works because I've already used it via a View in a browser. But when I try to mock it in a test using NUnit and Rhino Mocks, it always chokes on the Page.Identity.name in the GetUserId() method. I thought I had it but I'm obviously missing something.
Here's my CreateController method in my TestFixture:
I'm currently testing my application and am stuck on trying to figure out how to create a custom fake URL referrer. I've tried to hard code it, but am getting an error that it is read-only. Here is what I've tried so far:
fakeController.HttpContext.Request.UrlReferrer.AbsolutePath = "http://www.yahoo.com"; as well as, fakeController.Request.UrlReferrer = "http://www.yahoo.com";
I've searched the web for some ideas on how to create a fake/mock URL referrer for my fake controller, but have had no luck.
Note: I'm using Visual Studios built-in unit testing facilities.
I would be more than willing to use any other unit testing system outside of Visual Studio, unfortunately here at my work we are only allowed to use Visual Studio's built-in system, so I gotta work with what I've got.
Since I'm having problem with unit testing RenderPartialViewToString() with Moq framework [URL] I'm thinking about getting my controller directly, without using Moq for these particular test, however, how do I mocks (or set) the HttpContext for my test without using any Moq framework?
I need to able to do something similar to this, without Moq of course:
var mockHttpContext = new Mock<ControllerContext>(); mockHttpContext.SetupGet(p => p.HttpContext.User.Identity.Name).Returns("n1\test"); mockHttpContext.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
I'm using the mock framework to unit test some methods. I came across some methods that use delegates. I did not find a way to setup these delegates to return the objects that I want. The mock framework does not support it as far as I know. Is this supported in other mock frameworks like nMock?
I'm trying to mock Server.HtmlEncode(), but I keep having a null reference exception.I'm pretty new to the Moq framework, here is my code:
var context = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); var response = new Mock<HttpResponseBase>(); var session = new Mock<HttpSessionStateBase>(); var server = new Mock<HttpServerUtilityBase>(); server.Setup(svr => svr.HtmlEncode(It.IsAny<string>())).Returns((string s) => s); context.Setup(ctx => ctx.Request).Returns(request.Object); context.Setup(ctx => ctx.Response).Returns(response.Object); context.Setup(ctx => ctx.Session).Returns(session.Object); context.Setup(ctx => ctx.Server).Returns(server.Object);
I have to setup an MVC project to house all the HTML documents. This would be like a hierarchical structure using routing. The pages don't have to function, just act as placeholders. It's really just for the group to see all the HTML Pages to get an Idea of functionality. Then we would back fill groups of pages with the functionality by creating the controllers, model etc. How would this be best accomplished? Are there mock frameworks that could accomplish this? So it would be a project just having views, with a control ler that allows navigation between pages, simple to show mostly static HTML pages. The idea is simply for the group to see all the functionality, and to put together a structure to start coding. If possible we would like to see the correct URL based on the route table. What would be a quick solution for this while we work on the back end Object/Domain model?
i'm testing a simple "Person" controller, with default "Index" action with [Authorize] attribute, using Moq framework. The problem is, even if i set request.IsAuthenticated to false or true, the view rendered is always the same. Here is it the action:
my main concern is using Session. I've always been under the impression that if you use the following statements (not that I would):
Session["newVar1"] = "a new session variable"; Session["newVar2"] = "a new session variable"; Session["newVar3"] = aLargeVariableThatHoldsLotsOfData;
You would be creating 3 new session cookies that hold the particular value. But I think my asp book is indicating that you would actually create 3 new variables in your session state object and ASP would only pass a unique Session ID (as a cookie?) in the response, and would get this ID upon the next request and associate that ID with your Session State Object (that IIS has stored in memory..?):
That doesn't seem ideal for a website with lots of traffic. A server that is storing and maintaining thousands and thousands of instances of session state per website seems like way too much overload. I'm trying to see what's going on on my own, but I'm having trouble.. I can't find my site's cookies anywhere on my machine (IE/windows xp). I've checked C:Documents and Settings icholasrCookies and C:Documents and Settings icholasrLocal SettingsTemporary Internet Files which, according to this yahoo answer, IE cookies are stored as well. I'm using ticket authentication in my app which stores a auth cookie on the client, so a cookie from my site has to be somewhere..