Skip to content

Instantly share code, notes, and snippets.

@DotNetNerd
Created May 8, 2013 07:31
Show Gist options
  • Save DotNetNerd/5538830 to your computer and use it in GitHub Desktop.
Save DotNetNerd/5538830 to your computer and use it in GitHub Desktop.
FUnit and Foq sample
namespace Library1.Tests
open NUnit.Framework
open FsUnit
open Foq
type person = {Name : string ; PhoneNumber: string}
type IPhoneNumberRepository =
abstract member FindPhoneNumber : string -> string
type PersonService(phonenumberRepository : IPhoneNumberRepository) =
let _phoneNumberRepository = phonenumberRepository
member this.GetPerson(name: string) = {Name = name ; PhoneNumber = _phoneNumberRepository.FindPhoneNumber(name)}
module mocks =
let MockPhoneNumberRepository() =
{
new IPhoneNumberRepository with
member this.FindPhoneNumber(name) = match name with "Elisabeth" -> "87654321" | _ -> ""
}
[<TestFixture>]
type ``Given a IPhoneNumberRepository`` ()=
let numberRepoMock =
Mock<IPhoneNumberRepository>()
.Setup(fun phoneNumberRepository -> <@ phoneNumberRepository.FindPhoneNumber("Christian") @>)
.Returns("12345678").Create()
[<Test>] member test.``when I get a person the phone number is retrieved correctly using object expression.`` ()=
let sut = PersonService(mocks.MockPhoneNumberRepository())
sut.GetPerson("Elisabeth").PhoneNumber |> should equal "87654321"
[<Test>] member test.``when I get a person the phone number is retrieved correctly using mock.`` ()=
let sut = PersonService(numberRepoMock)
sut.GetPerson("Christian").PhoneNumber |> should equal "12345678"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment