First of all, it's important to separate the concepts of testing and mocking. For unit-testing (to drive your tests), JUnit (for Java) and NUnit (for .NET) are the most popular choices. The situation around mocking (or isolation) frameworks is more complicated.
Mocking frameworks divide into two camps, which I like to call "conventional" and "alternative."
Conventional frameworks rely primarily on design for testability and dependency injection. Alternative frameworks rely on things like Profiling API or the Java 5 SE instrumentation feature (the java.lang.instrument package) to modify CIL or bytecode at runtime, which makes any dependency mockable.
Examples of such alternative networks are Typemock Isolator (for .NET) and JMockit (for Java) (Typemock is not free unless you use it in an open-source project.)
As for the conventinal mocking frameworks for .NET, the two most popular ones currently are RhinoMocks and Moq. Both rely heavily on C# 3.0 features, particularly the lambda syntax, to allow concise specifications of mock object behaviors and expectations.