So after the overview, let’s get down to business. How do we create fake instances?
1 |
Dim fakeProduct As Product = FakeInstance(Of Product)(Members.ReturnNulls) |
Not surprised? Well, it is that simple. As with its C# sibling, we have the following options to create a fake, using the Members argument:
- Members.ReturnRecursiveFakes – The default (also in C# from 5.2). Every method on this object returns a fake object. Every method on that fake object returns another fake object. And so on. You’ll never get a NullReferenceException again.
- Members.ReturnNulls – Every method returns eiter a Null for reference types and 0 for value types.
- Members.CallOriginal – Really a live object, all methods, including the constructors are called as implemented.
- Members.MustSpecifyReturnValues – A strict policy. You’ll get a VerifyException if a method is called, but there was no behavior set on that method.
Except for the CallOriginal option, all others create a fake object, without calling its constructor. Note that if the constructor is not invoked, you might run into un-initialized fields later.
I would use the CallOriginal option only when I can’t use a real constructor, for items that have private constructors, or constructors that take arguments that I don’t care about or want to build.
Now, that I have a fake in my hand, I can set it’s behavior. But that’s for the next post. Let’s look at this code example of a VB Sub:
1 |
Private Shared Sub CreateProduct(ByVal name As String)<br /> Dim product As New Product()<br /> product.Name = name<br />End Sub |
I want to test this method. But the Product is constructed (or “New”-ed) inside the method. We call this a future object. How do swap it with our fake one?
1 |
Dim fakeProduct As Product = FakeInstance(Of Product)()<br />SwapNextInstance(Of Product)(fakeProduct) |
Again, no surprises to those who know the C# API. SwapNextInstance will cause the next New Product object to replace the fakeProduct.
Next time – on setting behavior.