The cleverest part is that unlike MOQ the mocks produced actually implement the interface they're mocking and this makes the code much clearer and a little bit shorter.
Here is a very simple example:
var mockThing = Substitute.For<IThing>(); mockThing.DoThingy().Returns("Something"); // Use mock thing UseThing(mockThing);
In MOQ this is also quite straightforward but the setup code to change what a mocked method returns always had me reaching for Google.
var mockThing = new Mock<IThing>(); mockThing.Setup(m => m.Now()).Returns(new DateTime()); // Use mock thing UseThing(mockThing.Object)