My two cents:
Test frameworks like xUnit, NUnit, etc provide two different sets of features: assertions and test organization. Test organization using attributes is quite inflexible compared to modeling tests as first-class values, which is the approach I took with Fuchu. I wrote about first-class tests in this series of posts:
Assertions: FsUnit and Unquote fall into this category.
I used to use FsUnit, but then I came to generally dislike DSLs that want to look like English as they are more verbose for no real benefit or even actually obfuscate things.
Unquote looks interesting, unfortunately I don't have any first-hand experience with it. Also I'm always a bit wary of expression evaluators, i.e. what if I feed it some expression it doesn't support?
Anyway I tend to be pretty minimal about assertions, and sometimes a pattern match is just simpler than calling an assert function.
Mocks are mostly useful if you have code with side-effects. Since side-effects should be minimized, mocks shouldn't be common. You might want to check out Phil Trelford's Foq (
http://foq.codeplex.com/ ), which is sort of like Moq but for F#. The Foq homepage also has links to lots of articles about mocking.
For BDD-style testing there's Phil Trelford's TickSpec (
http://tickspec.codeplex.com/ ) and Steffen's NaturalSpec (
https://github.com/forki/NaturalSpec ). I'm generally not a fan of BDD but maybe that's because I've never worked in an environment where non-technical stakeholders could (or wanted to) write specs in Gherkin.
I hope I didn't miss any general-purpose F# testing tools! Anyway, none of this is very specific of F# or even .NET, e.g. FsCheck and Fuchu are usable in C#/
VB.NET and are based on concepts borrowed from Haskell. And there's a project similar to Unquote for C# (
https://github.com/PowerAssert/PowerAssert.Net ), and both are based on a testing library for Groovy. Also regardless of the language, mocks are mocks, BDD is BDD, randomized testing, fluent interfaces, first-class tests are the same thing, just that some have a slightly specific implementation/execution in F#, but in general, "recommended practices for F# testing" isn't very meaningful IMHO.
Cheers,
Mauricio