Mocking in F# is as easy as following the argument signature. Let’s say you depend on current time. Time is a function (unit -> DateTimeOffset). Want to time travel? Implement a function with that signature returning a specific time.

Code Snippet
type MembershipBenefit = Silver | Gold
let calculateBenefit (getCurrentTime: unit -> DateTimeOffset) (registrationDate: DateTimeOffset) =
let currentTime = getCurrentTime ()
let daysRegistered = (currentTime - registrationDate).Days
if daysRegistered > 10000 then
Gold |> Some
else if daysRegistered >= 2500 && daysRegistered <= 10000 then
Silver |> Some
else
None
// (unit -> DateTimeOffset) -> DateTimeOffset -> MembershipBenefit option
let registrationDate = new DateTimeOffset(1990,1,1, 1, 1, 1, TimeSpan.Zero)
let getCurrentTime () = DateTimeOffset.Now
calculateBenefit getCurrentTime registrationDate |> printfn "%A"
let someSpecificDate () = new DateTimeOffset(1991,1,1, 1, 1, 1, TimeSpan.Zero)
calculateBenefit someSpecificDate registrationDate |> printfn "%A"