C#: How Compile Classes In App_Code So That Can Be Run From Command Line For Unit Testing
Jul 27, 2010
I have several class files in App_Code in an ASP.net website running in Microsoft Visual Studio 2005 Professional.In liu of using a full unit test suite I just want to somehow compile those project-wide classses into an .EXE so that I can nightly run unit tests on them.I do know how to create a separate C# library project consisting of those files and how to include them into my website--but that is not desirable--I don't want to give up the ability to make on-the-fly code changes of those library classes when running the website in the debugger. As far as I know .Net debugger isn't powerful enough to modify code in included libraries with instant auto re-compilation on page re-load.So, I want my cake and eat it, too:
Command-line unit testing of website class files in App_Code directoryBeing able to modify those class files w/o stopping/re-starting the web debugger.
is there some property where I can tell Code First to work against a static in memory lists ?
I am thinking on creating some generic class to work against code first like in the ASP.NET MVC Unleashed book and I was wondering if maybe there is simple way or something which is already made instead of me creating all the generic fakes ?
+ if i use Code First , should I still create a repository to work against this domain model ?
I am trying to figure out how to publish a web app from a command line if there isn't a solution file present. Is this possible? Is it possible to generate a solution file from the command line? I would need example of how this is accomplished.
I have a Perl script that calls aspnet_compiler.exe to compile a large ASP.NET website. The problem is that it takes very long to run. Is there any way to compile just a single .aspx file from the command line? (I think that would suit the needs of my script) It seems that all aspnet_compiler.exe can do is compile at a directory level.
Recently for a class to implement unit test for one of its private methods I used PrivateObject by creating private accessor instead of refelection, to which i received a code review comment as below
"My main concern with Private Object is the use of object[] in constructor. It replaces strong typing enforced by compiler with JavaScript-style run-time error detection.Consequently , personally, I would not recommend it."
Comments above confused me beacuse as per my understanding reflection also needs the object[] to invoke any method.
I'm using VSTS 2K8 and I've set up a Unit Test Project. In it, I have a test class with a method that does a simple assertion. I'm using an Excel 2007 spreadsheet as my data source.
My test method looks like this:
[Code]....
As indicated in the method decoration attributes, my Excel spreadsheet is on my local C:/ Drive. In it, the sheet where all of my data is located is named "Sheet1".I've copied the Excel spreadsheet into my project and I've set its Build Action = "Content" and I've set its Copy to Output Directory = "Copy if Newer".
When trying to run this simple unit test, I receive the following error:
The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: ERROR [42S02] [Microsoft][ODBC Excel Driver] The Microsoft Office Access database engine could not find the object 'Sheet1'. Make sure the object exists and that you spell its name and the path name correctly.
I've verified that the sheet name is spelled correctly (i.e. Sheet1) and I've verified that my data sources are set correctly.Web searches haven't turned up much at all. [Code]....
Working with Visual Studio (I'm using 2008) I have started to notice that when you save a file in the /App_Code folder, the program will hang for a bit before returning control. After a bit of research, I have learned that there's an auto-compile feature at work, which I assume is what is slowing down my system.
So the question is this: Is it possible to turn off the automatic compiling of files in the /App_Code folder? Or, even better, is there a way to reduce the time that it takes, or make it work a little more smoothly in the background?
ave never used ajax.... I'm currently putting together a little web app that basically calls a program on the server itself (a command line tool) and displays the output to the web page.When the command line tool is run from the command line, it outputs status messages as it does it's thing... as it is now, my page just displays all the output when it's done. What I would like to do is show each line of output on the web page as they happen, just like when run from the command line. I'm guessing ajax is what I need... can anyone point me in the right direction for this specific scenario (user clicks button, output streams to web page as it happens without full page post backs)... a good example would be how ping.exe displays it's output on the command line
I've been scratching my head for what seems like ages. I'm sure its really simple to fix but I can't see it.
I have a class in App_Code that uses a bit of Linq.
var siteMap = SiteMapWrapper.BuildSiteMap(true); var currentTopLevelParent = siteMap.Single(s => s.IsActive); if (currentTopLevelParent != null)
I've developed this locally and all works fine. When I transfer to IIS hosting the same class fails to compile. I receive:
does not contain a definition for 'Single' and no extension method 'Single' accepting a first argument of type 'SiteMapWrapper' could be found (are you missing a using directive or an assembly reference?)
I confirmed that the virtual dir is running .NET 2.0 as it should. I also confirmed that the correct assemblies are being loaded in the web.config.
I have been looking at the unit testing topic and honestly I have never yet seen it in a live application.
Im a little foggy on the subject.... A simple example is if I am populating a listbox with data, I would know through debugging if the data is being populated and if it wasnt it would probably be easy to figure out why. Futhermore I couldnt possibly put it in production if it wasnt work so, why would I need to do a unit test? I dont see the point of it.
I'm using the Moq framework to do my unit testing. I'm following some really useful instructions outlined here to mock the httpcontext, specifically for the purposes of testing the url referrer:[URL]
Everything seems to compile fine, however when running the test I get the following error:
System.Web.HttpException: Invalid use of SimpleWorkerRequest constructor. Application path cannot be overridden in this context. Please use SimpleWorkerRequest constructor that does not override the application path..
When analyzing I find the error seems to be thrown at the following line:
var wr = new SimpleWorkerRequest("", "", "", "", writer); I'm not sure what to make of this. What is the SimpleWorkerRequest and how does it work in creating the HttpContext in Moq?? Why is my use of it invalid according to the debugger??
UPDATE: Here is the complete method I use taken from the website above
public static HttpContextBase FakeHttpContext() { var httpContext = new Mock<HttpContextBase>(); var request = new Mock<HttpRequestBase>(); var response = new Mock<HttpResponseBase>(); var session = new Mock<HttpSessionStateBase>(); var server = new Mock<HttpServerUtilityBase>(); var cookies = new HttpCookieCollection(); httpContext.Setup(x => x.Server).Returns(server.Object); httpContext.Setup(x => x.Session).Returns(session.Object); httpContext.Setup(x => x.Request).Returns(request.Object); httpContext.Setup(x => x.Response).Returns(response.Object); response.Setup(x => x.Cookies).Returns(cookies); httpContext.SetupGet(x => x.Request.Url).Returns(new Uri("http://www.csuci.edu")); httpContext.SetupGet(x => x.Request.UrlReferrer).Returns(new Uri("http://www.csuci.edu")); //var writer = new StringWriter(); //var wr = new SimpleWorkerRequest("", "", "", "", writer); //HttpContext.Current = new HttpContext(wr); return httpContext.Object; }
I commented out the problem lines, that seemed to fix it, but I'm still not sure what those lines were supposed to do and why they were causing error.
I created a new ASP.NET MVC application and the accompanying unit tests that can be generated automatically. I created a new Controller method and tried to wire up a test. The test failed, and I tried to step through the test code to find out the state of certain variables. The breakpoint showed as being set, but it never was hit.
I did a Google search on this, and there are many other people wondering the same thing - why doesn't this work? The answers have been sketchy at best. The most proliferant seems to be that the unit tests are run in the production configuration instead of the debug configuration, and so several steps are required to get breakpoints to work. Seriously? This is something I would expect to be enabled by default. What good is test code you can't step through? Why create a set of unit tests that require you to jump through several hoops to get this very basic feature running? NUnit (and I suppose others) don't have this issue.
how to get the breakpoints to work were completely different than all the others, and I'd like to know if anyone has an idea of how to enable debugging of the unit tests that are included in Visual Studio 2008.
I would like to have information on the available unit testing frameworks in .NET realm. Especially the ones which are suitable for ASP.NET (C# .NET 3.5).
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:
[code]...
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?
How can I render a razor view in a Unit Test?When I change for instance a html helper method, I sometimes forget to update all the views which uses that html method. So the view I forgot generates a YSOD.I would like to create unit tests that renders a view and fails if I forgot to make the neccecary updates.
How can BuildProvider's GenerateCode method be tested. I created a BuildProvider and now I want to unit test it. Is it possible? Initial question was not clear enough. I don't want to stub AssemblyBuilder, I want to mimic asp.net request. I want to make sure that VirtualPathProvider and BuildProvider work fine together.
One more clarification, I am not really interested in generated code from build provider, it is used only to kick-start compilation in medium-trust environment, I already have a code, I need build provider just so I could compile since CodeDomProvider is not accessible directly in medium trust.
Using vb.net/asp.net 2005. I have a project that is done with all vb.net, however I want to get some more experience with C#.Net. I am considering creating a new database class to put in the app_code folder.
I have an application which contains different modules from different databases, for instance, I have a table called "ITEMS" in each database. When I create the classes for the table ITEMS I wonder how I can differentiate among them.
For instance, for now, I have "ItemDetails.cs" under App_Code folder BUT I need to create another "ItemDetails.cs" class which will reference the table ITEMS from a different database. If I create folder under the App_code the class name still remains the same.
I could add an acronym in front the class to differentiate which database I am working from but that makes the class name too long.
I have a class which I store in session. Lets say Class A, having an attribute theList. I have a member function that adds an item to theList and returns the count of my list.So I mock my class and set theList to "1,2,3" for my unit test, and test my add function by adding "4".