The reason is that FsUnit uses an untyped mechanism under the hood, therefore it Expectedis displayed as objectusing type checking (see the part Object yon the stack).
The workaround is to add type annotations for generic values i.e.
[<Test>]
let test() =
f []
|> should equal (Some ([]: int list))
Several people have been bitten by this, for example, Weird No behavior in type providers .
, . :
let shouldEqual (x: 'a) (y: 'a) =
Assert.AreEqual(x, y, sprintf "Expected: %A\nActual: %A" x y)