I\'m currently on a co-op term working on a project nearing completion with one other co-op student. Since this project has been passed down from co-op to co-op, poor practices
Working Effectively with Legacy Code by Michael Feathers (also available in Safari if you have a subscription) is an excellent resource for your task. The author defines legacy code as code without unit tests, and he gives practical walkthroughs of lots of conservative techniques—necessary because you're working without a safety net—for bringing code under test. Table of contents:
Working Effectively with Legacy Code by Michael Feathers
Hard to know if implementing a factory pattern will do any good, depends on what the code is doing :)
It's very difficult to start new development practises mid way through a project. In the past when I've worked on projects that haven't been unit tested from the start, a good approach to take is to set down the rule that 'new code must have unit tests' but don't put pressure on unit tests being written for old code.
Of course, even this is difficult when the structure of the project is not suited to testability.
My best recommendation would be take it in small steps.
Start by creating your unit test assembly, (or project or whatever) with no tests in it. Then find a single small area of code that is fairly well defined and seperated, and write some unit tests for that area. Get your co-coder to take a look too and start getting some 'best practises' going, like running the unit tests every time any code is checked in (automatically if possible).
Once you have that working, you can slowly start to add more.
The key is slowly. And like I said, it's easier to make old code exempt from the testing to begin with. You can always return to it later once your team has grasped the idea of unit testing and has become better at writing them.
How about writing a series of black-box tests around major pieces of functionality in your code? Since you mention that it's an ASP.NET project, you can use a framework such as WaitN or Selenium to automate a web browser. This gives you a baseline set of functionality that should remain constant no matter how much the code changes.
Once you have a comfortable number of tests testing the high-level functionality of your project, I'd then start diving into the code, and as Simon P. Stevens mentions, work slowly. Grab a (free!) copy of Refactor! for Visual Basic, so you'll be able to automatically perform some basic refactoring, such as Extract Method. You can drastically increase testability without changing any functionality just by splitting up larger chunks of code into smaller, more testable chunks.