May
15

Ruby Style Mocking in .NET

Author Eli Lopian    Category .NET Tests     Tags

I had a great discussion with a college about the difficulties of understanding the technical parts of the automated Mocking frameworks.

The one point that takes some time to grasp is the fact that  methods are written within the test that are not actually called, but are stubs/mocks that will be called at a later time. This is true to all frameworks. He then suggested that having the ability to swap one type with another would help in understanding the flow of the test. So I whipped together some code to do just that.

Using this code it is possible to swap one type with another. The two types must have the same methods, but the swapping type doesn’t need to have all the methods of the original type.

Here is an example:

public class OriginalClass { public int ReturnOne() { return 1; } public static int StaticReturnOne() { return 1; } }

Static Method Swapping

Suppose we want to fake the static methods of the OriginalClass, we simply write a new class.

public class FakeClass { public static int StaticReturnOne() { return 2; } }

Note: apart from the names of the methods the two classes are not related.

Here is how we fake the calls,

  • We Swap the OriginalClass with the FakeClass by: Swap.StaticCalls()
  • All static calls to OriginalClass methods that exist in the FakeClass are diverted to the FakeClass.
  • We Unswap the types at the end of the test by Swap.Rollback()
[TestMethod] public void SwapStatic_CallsFake() { Swap.StaticCalls<OriginalClass, FakeClass>(); Assert.AreEqual(2, OriginalClass.StaticReturnOne()); Swap.Rollback(); }

Instance Swapping

We can do the same with instances, we can create a new FakeClass and swap the instances.

public class FakeClass { public int ReturnOne() { return 2; } }

Note: again, apart from the names of the methods the two classes are not related, but they both might implement the same interface or base class and thus support refactoring.

Here is how we fake the calls,

  • We Swap the next new OriginalClass with the FakeClass by Swap.NextNew().
  • All calls to that OriginalClass method which exist in the FakeClass are diverted to the FakeClass.
[TestMethod] public void SwapInstance_CallsFake() { Swap.NextNew<OriginalClass, FakeClass>(); OriginalClass swappedInstance = new OriginalClass(); Assert.AreEqual(2, swappedInstance.ReturnOne()); }

Missing Methods

At this stage the missing methods of the swapped type can have 2 behaviors:

  • Call the original class (Default or UndefinedMethods.CallOriginal)
  • Do nothing and Return a default value (UndefinedMethods.Ignore)

This is set in the swap statements.

Downloads

Bookmark and Share

6 Comments to “Ruby Style Mocking in .NET”

  • Eli Lopian’s Blog (TypeMock) » Blog Archive » Mocking frameworks - dream feature May 20, 2008 at 8:39 am

    [...] In other languages where objects can be swapped without Dependency Injection, there is no-one, calling these features – Bad Practice, just the opposite. They are called ‘Power features’, because that is what they are. [...]

  • "Swapping" instead of "Injecting" calls between classes | Developer Home May 23, 2008 at 12:31 am

    [...] Eli Lopian, Typemock CEO and awesome Coder, just created a nice little API wrapper around Typemock Isolator that would allow a very simple and readable "Swapping" effect between classes. It would allow you to write code like this: [...]

  • Eli Lopian’s Blog (TypeMock) » Blog Archive » Ruby Style Isolating - Aspect Faking November 13, 2008 at 2:39 pm

    [...] I have talked in the past about Ruby Style Isolating (Dynamically Typed), now it is part of the AAA syntax.  [...]

  • nike air max pegasus 89 April 11, 2014 at 4:04 am

    The business presentation of add on possibly a lot of critical factors while you are extramarital relationships your way through web sites. photo linked add on accept become good enough more effective and may show up with some other volume. list linked commemoration add on needs to ne good, and definately will animate people to buy the solution.
    [url=http://www.tayybahorsegear.com/air.php?p=47]nike air max pegasus 89[/url]
    nike air max pegasus 89

  • nike sb koston 2 black April 14, 2014 at 10:55 am

    favor : Il existe nufactured nombreuses d茅clinaisons du M17x R3, Certaines fonctionnant sous processeur apple fundamental i7 2760QM ou 2670QM (Moins puissants cual l. a,chicago account 茅valu茅e ici), D’autre avec une carte graphique AMD hd 6990M ou une NVIDIA GTX 560M, D’autres encore sont d茅pourvues d’茅crans 120 hertz (3D active). put ceux l脿 l’ensemble des remarques sur l’ergonomie g茅n茅rale restent valab, Mais l’ensemble des shows, l’ensemble des capacit茅s dans l. a,chicago jeux et nufactured qualit茅 l’茅cran seront diff茅rents. Suivant l. a,chicago d茅clinaison choisie, Le prix nufactured vente peut 茅galement varier du plain au double. V茅rifiez donc bien l’ensemble des composants avant promote achat!
    nike sb koston 2 black

  • http://www.imemorieshub.com/10-hermes---32-tpm------rcp-yochika.html May 7, 2014 at 9:56 pm

    Just the thing people change from this jacket is known as a model.

Post comment