views:

15

answers:

1

Hi there, i'm new in web dev and have following questions

I have Web Site project. I have one datacontext class in App_Code folder which contains methods for working with database (dbml schema is also present there) and methods which do not directly interfere with db. I want to test both kind of methods using NUnit.

As Nunit works with classes in .dll or .exe i understood that i will need to either convert my entire project to a Web Application, or move all of the code that I would like to test (ie: the entire contents of App_Code) to a class library project and reference the class library project in the web site project.

If i choose to move methods to separate dll, the question is how do i test those methods there which are working with data base? :

  • Will i have to create a connection to db in "setup" method before running each of such methods? Is this correct that there is no need to run web appl in this case?

  • Or i need to run such tests during runtime of web site when the connection is established? In this case how to setup project and Nunit?

  • or some another way..

Second if a method is dependent on some setup in my .config file, for instance some network credentials or smtp setup, what is the approach to test such methods?

I will greatly appreciate any help! The more it's concrete the better it is. Thanks.

A: 

Generally, you should be mocking your database rather than really connecting to it for your unit tests. This means that you provide fake data access class instances that return canned results. Generally you would use a mocking framework such as Moq or Rhino to do this kind of thing for you, but lots of people also just write their own throwaway classes to serve the same purpose. Your tests shouldn't be dependent on the configuration settings of the production website.

There are many reasons for doing this, but mainly it's to separate your tests from your actual database implementation. What you're describing will produce very brittle tests that require a lot of upkeep.

Remember, unit testing is about making sure small pieces of your code work. If you need to test that a complex operation works from the top down (i.e. everything works between the steps of a user clicking something, getting data from a database, and returning it and updating a UI), then this is called integration testing. If you need to do full integration testing, it is usually recommended that you have a duplicate of your production environment - and I mean exact duplicate, same hardware, software, everything - that you run your integration tests against.

womp
Thx for explanations! As i need exactly unit testing, i will further investigate correct using of NUnit with website
qwebek