Detecting what code changed since the last build and only running the affected unit tests is part of what Continuous Integration (CI) servers can do for you. James Black is quite correct that you want to run the relevant suite of tests when you make a change, not just one test or one fixture. However, you may have a shared library project with a suite of tests and a dependent application project with its own suite of tests. Changes to the application code aren't going to affect the library code, so you can set up your CI build to run all the tests if the library code changes but only the application tests if the application code changes. (You may still want to do nightly builds.) This also depends on your revision/source control system; it may not be possible depending on the combination of source control and CI software.
Matthew Scharley is also correct in that dependencies are best handled by isolation/mocking frameworks for the purpose of unit tests. Both NUnit and MSTest (as well as most of the other xUnit frameworks) can also be used for full integration tests (ones that use the actual dependencies, such as calling web services).
For a very biased view on NUnit vs. MSTest, see MSBuild, NAnt, NUnit, MSTest, and frustration. For a strict comparison (somewhat biased in the other direction), see Comparing the MSTest and Nunit Frameworks.
From a personal standpoint (pure opinion), the key features I need have been available in NUnit, so I've seen no reason to evaluate MSTest. Visual Studio Team System has very tight integration with MSTest (I saw a nice demo that showed code coverage visually); if my company were using that (very expensive) version of VS, MSTest might be worth considering. One key question would be if we could get it working with our CI server.