Manual Mocking: Resisting the Invasion of Dots and Parentheses 232

Posted by Uncle Bob Wed, 28 Oct 2009 23:12:16 GMT

The twittersphere has been all abuzz today because of something I tweeted early this morning (follow @unclebobmartin). In my tweet I said that I hand-roll most of my own mock objects in Java, rather than using a mocking framework like mockito.

The replies were numerous and vociferous. Dave Astels poignantly stated that hand-rolling mocks is so 2001!

So why do I roll my own mocks?

Consider the following two tests:
public class SelectorTest {
  private List<Object> list;

  @Before
  public void setup() {
    list = new ArrayList<Object>();
    list.add(new Object());
  }

  @Test
  public void falseMatcherShouldSelectNoElements_mockist() {
    Matcher<Object> falseMatcher = mock(Matcher.class);
    Selector<Object> selector = new Selector<Object>(falseMatcher);
    when(falseMatcher.match(anyObject())).thenReturn(false);
    List<Object> selection = selector.select(list);
    assertThat(selection.size(), equalTo(0));
  }

  @Test
  public void falseMatcherShouldSelectNoElements_classic() {
    Matcher<Object> falseMatcher = new FalseMatcher();
    Selector<Object> selector = new Selector<Object>(falseMatcher);
    List<Object> selection = selector.select(list);
    assertThat(selection.size(), equalTo(0));}

  private static class FalseMatcher implements Matcher<Object> {
    public boolean match(Object element) {
      return false;
    }
  }
}

The first test shows the really cool power of mockito (which is my current favorite in the menagerie of java mocking frameworks). Just in case you can’t parse the syntax, let me describe it for you:

  • falseMatcher is assigned the return value of the “mock” function. This is a very cool function that takes the argument class and builds a new stubbed object that derives from it. In mockito, the argument can be a class or an interface. Cool!
  • Now don’t get all panicy about the strange parenthetic syntax of the ‘when’ statement. The ‘when’ statement simply tells the mock what to do when a method is called on it. In this case it instructs the falseMatcher to return false when the ‘match’ function is called with any object at all.

The second test needs no explanation.

...

And that’s kind of the point. Why would I include a bizzare, dot-ridden, parentheses-laden syntax into my tests, when I can just as easily hand-roll the stub in pure and simple java? How hard was it to hand-roll that stub? Frankly, it took a lot less time and effort to hand-roll it than it took to write the (when(myobj.mymethod(anyx())).)()).))); statement.

OK, I’m poking a little fun here. But it’s true. My IDE (InteliJ) generated the stub for me. I simply started with:

Matcher<Object> falseMatcher = new Matcher<Object>() {};

InteliJ complained that some methods weren’t implemented and offered to implement them for me. I told it to go ahead. It wrote the ‘match’ method exactly as you see it. Then I chose “Convert Anonymous to Inner…” from the refactoring menu and named the new class FalseMatcher. Voila! No muss, no fuss, no parenthetic maze of dots.

Now look, I’m not saying you shouldn’t use mockito, or any of these other mocking tools. I use them myself when I must. Here, for example, is a test I wrote in FitNesse. I was forced to use a mocking framework because I did not have the source code of the classes I was mocking.
  @Before
  public void setUp() {
    manager = mock(GSSManager.class);
    properties = new Properties();
  }

  @Test
  public void credentialsShouldBeNonNullIfServiceNamePresent() throws Exception {
    properties.setProperty("NegotiateAuthenticator.serviceName", "service");
    properties.setProperty("NegotiateAuthenticator.serviceNameType", "1.1");
    properties.setProperty("NegotiateAuthenticator.mechanism", "1.2");
    GSSName gssName = mock(GSSName.class);
    GSSCredential gssCredential = mock(GSSCredential.class);
    when(manager.createName(anyString(), (Oid) anyObject(), (Oid) anyObject())).thenReturn(gssName);
    when(manager.createCredential((GSSName) anyObject(), anyInt(), (Oid) anyObject(), anyInt())).thenReturn(gssCredential);
    NegotiateAuthenticator authenticator = new NegotiateAuthenticator(manager, properties);
    Oid serviceNameType = authenticator.getServiceNameType();
    Oid mechanism = authenticator.getMechanism();
    verify(manager).createName("service", serviceNameType, mechanism);
    assertEquals("1.1", serviceNameType.toString());
    assertEquals("1.2", mechanism.toString());
    verify(manager).createCredential(gssName, GSSCredential.INDEFINITE_LIFETIME, mechanism, GSSCredential.ACCEPT_ONLY);
    assertEquals(gssCredential, authenticator.getServerCredentials());
  }

If I’d had the source code of the GSS classes, I could have created some very simple stubs and spies that would have allowed me to make these tests a lot cleaner than they currently appear. Indeed, I might have been able to test the true behavior of the classes rather than simply testing that I was calling them appropriately…

Mockism

That last bit is pretty important. Some time ago Martin Fowler wrote a blog about the Mockist and Classical style of TDD. In short, Mockists don’t test the behavior of the system so much as they test that their classes “dance” well with other classes. That is, they mock/stub out all the other classes that the class under test uses, and then make sure that all the right functions are called in all the right orders with all the right arguments. etc. There is value to doing this in many cases. However you can get pretty badly carried away with the approach.

The classical approach is to test for desired behavior, and trust that if the test passes, then the class being tested must be dancing well with its partners.

Personally, I don’t belong to either camp. I sometimes test the choreography, and I sometimes test the behavior. I test the choreography when I am trying to isolate one part of the system from another. I test for the behavior when such isolation is not important to me.

The point of all this is that I have observed that a heavy dependence on mocking frameworks tends to tempt you towards testing the dance when you should be testing behavior. Tools can drive the way we think. So remember, you dominate the tool; don’t let the tool dominate you!

But aren’t hand-rolled mocks fragile?

Yes, they can be. If you are mocking a class or interface that it very volatile (i.e. you are adding new methods, or modifying method signatures a lot) then you’ll have to go back and maintain all your hand-rolled mocks every time you make such a change. On the other hand, if you use a mocking framework, the framework will take care of that for you unless one of the methods you are specifically testing is modified.

But here’s the thing. Interfaces should not usually be volatile. They should not continue to grow and grow, and the methods should not change much. OK, I realize that’s wishful thinking. But, yes, I wish for the kind of a design in which interfaces are the least volatile source files that you have. That’s kind of the point of interfaces after all… You create interfaces so that you can separate volatile implementations from non-volatile clients. (Or at least that’s one reason.)

So if you are tempted to use a mocking framework because you don’t want to maintain your volatile interfaces, perhaps you should be asking yourself the more pertinent question about why your interfaces are so volatile.

Still, if you’ve got volatile interfaces, and there’s just no way around it, then a mocking framework may be the right choice for you.

So here’s the bottom line.

  • It’s easy to roll your own stubs and mocks. Your IDE will help you and they’ll be easier and more natural to read than the dots and parentheses that the mocking frameworks impose upon you.
  • Mocking frameworks drive you towards testing choreography rather than behavior. This can be useful, but it’s not always appropriate. And besides, even when you are testing choreography, the hand-rolled stubs and mocks are probably easier to write and read.
  • There are special cases where mocking tools are invaluable, specifically when you have to test choreography with objects that you have no source for or when your design has left you with a plethora of volatile interfaces.

Am I telling you to avoid using mocking frameworks? No, not at all. I’m just telling you that you should drive tools, tools should not drive you.

If you have a situation where a mocking tool is the right choice, by all means use it. But don’t use it because you think it’s “agile”, or because you think it’s “right” or because you somehow think you are supposed to. And remember, hand-rolling often results in simpler tests without the litter of dots and parentheses!

Comments

Leave a response

  1. Avatar
    Colin Goudie about 1 hour later:

    Isn’t that a bit of a strawman example? I mean, in reality your going to write a lot more tests than 1, that needs that dependency. Then what are your options?

    1. With the mockist approach, you’ll be doing one line changes in the tests to setup different expectations or returns. (ideally refactored into nice reusable methods)

    2. Manually roll the mocks and end up with weird flag type objects to return different results or worse, lots of hand-rolled mocks of the same interface for different tests

  2. Avatar
    Esko Luontola about 2 hours later:

    You don’t even need to type

    Matcher<Object> falseMatcher = new Matcher<Object>() {};

    It’s enough to type

    Matcher<Object> falseMatcher = new

    and then press Ctrl+Shift+Space. IntelliJ will generate the anonymous inner class and stubs for all the methods that need to be implemented.

  3. Avatar
    Esko Luontola about 2 hours later:

    I was forced to use a mocking framework because I did not have the source code of the classes I was mocking.

    In Java it does not matter even if you don’t have the sources for some class. You can anyways extend the class/interface, because you have the .class files for it (otherwise you could not even compile). The lack of sources becomes a problem only when debugging or trying to understand how some third-party code works.

  4. Avatar
    Adam Sroka about 3 hours later:

    It’s not that the mock approach doesn’t test the behavior of the system. We test the behavior of the object we are currently testing. We test that the current object “dances” nicely by asserting that it obeys the contract of the interfaces it talks to.

    We do it this way so that we only have to test the behavior of a class once, in one place. It is about DRY. Testing the behavior of our classes in more than once place is:

    1) expensive – wasting cycles in our build, which we want to be fast so we can run it a lot.

    2) allows the build to lie to us – More than one test failed, but only one behavior is broken. Which one?

    3) brittle – when I change something multiple tests might have to change, whereas with the mock approach only two tests must change (The test that uses the mock interface, and the test that exercises the real implementation in the same way.)

    The only disadvantage is the discipline implied by that last point. If I expect to be able to use an interface some way I had better assure that I have tested using the implementation the exact same way. Even in a strongly typed language I can’t rely on the compiler to force me to do that.

  5. Avatar
    Pablo about 3 hours later:

    @Esko

    >> You can anyways extend the class/interface

    It’s not that easy, if It is a class you have to redefine each method so that the class acts as a mock (a lot of work), and sometimes (e.g. Spring MVC Controllers) the methods are final and you’re screwed.

  6. Avatar
    Steve Py about 4 hours later:

    I don’t think I understand how you can relate “how mocks are used” with “how mocks are provided”. Personally I use Moq for .Net and I cannot imagine going back to hand-rolling mock objects. Whether people use mocks to see how assemblies dance, or mock around behaviour is irrelevant to how you choose to mock.

    Hand rolling is ridiculous when dealing with interfaces that have more than a couple methods defined within them, I don’t care how much the IDE fills in for me. That’s like saying “I don’t need Generics/Templates because the IDE/Resharper/CodeSmith can just generate what I need.” It just adds to the cruft that I have to skip over/ignore.

    As for “dancing”, any checks a Mock does should be as simple and generic as possible. But asserting that key methods are called, and equally important “not” called in a given scenario is important. I.e. if in a normal path dependency A is called to perform an action, and you are asserting behaviour on an alternate path, then the mock can, and should report back a failure if that action is attempted when it shouldn’t have been.

  7. Avatar
    Ben Rady about 5 hours later:

    Do what is simpler. In Bob’s example, hand-rolled is simpler. Other cases may be different. I don’t understand why this has to be a religious debate.

  8. Avatar
    Adam D. about 5 hours later:

    Dear Uncle Bob,

    Take a look at RhinoMocks and AutoMocking container. It’s not Java so your arguments presented here don’t play out the same way in .NET. I find there is more work rolling your own, even with Resharper (what makes Visual Studio act like IntelliJ IDEA).

    Let me know what you think.

    Adam

  9. Avatar
    Joon about 7 hours later:

    Hi Bob

    I appreciate the “what makes sense” approach of this post.

    I think that too often we get carried away by shiny things, and forget that there may be less sexy, but more practical ways of achieving tasks.

    I am a firm believer in doing what makes sense.

    Having said that, I do like my rhino mocks in .NET ;-)

    Regards, Joon

  10. Avatar
    Franco Lombardo about 9 hours later:

    Great post, as usual!

    A little footnote. I’m and “old style” tester, so I do not appreciate verbosity in tests that does not lead to better expressivity. So what is the advantage of

    assertThat(selection.size(), equalTo(0));


    compared to

    assertEquals(0, selection.size());


    ???

  11. Avatar
    Dagfinn Reiersøl about 9 hours later:

    It seems to me it would be helpful to keep concepts separate. As you point out, Uncle Bob, the example is a stub, not a mock. Mock frameworks exist to generate mocks, not stubs, but people use them for stubs anyway, mostly because they’ve gotten used to it. It’s a capability of mock frameworks that’s used because it’s there. You might argue whether it’s better to use the mock framework or not in specific cases, but the bottom line is the gain is marginal, if it exists at all.

    It’s different if you need sensing. That means you need a mock or a Test Spy, and those are harder to hand-code.

    On the other hand, spies are superior to mocks in every conceivable way as far as I can tell. That might give you additional incentive to hand code, since mock frameworks often aren’t capable of generating spies.

  12. Avatar
    Steve Freeman about 11 hours later:

    C’mon Bob, you can make the case better than this.

    - as everyone has pointed out, this example is really about stubbing, so can we get the title right? - if I was doing this, I’d probably declare the FalseMatcher as a constant since it has no state. - on the other hand, I’m assuming you don’t care about which object is passed to the Matcher, since you don’t test that. Here it doesn’t matter, in other cases it might. - hand-rolled is only easier to read if you haven’t learned your tools (we’re all craftsmen, right?). How JUnit runs isn’t immediately obvious from the code, that’s why people get confused over when instances are created.

    As we wrote in the book, testing external libraries is about the last place we’d use a mocking framework, unless we were really stuck.

  13. Avatar
    Steve Freeman about 11 hours later:

    @Dagfinn Of course I’m biased, but I can’t follow your line about spies and mocks. I find that spies don’t highlight the object relationships as clearly as I’d like, it’s harder to express sequence and state constraints, and they don’t force a failure until after the test is over.

  14. Avatar
    Josh about 12 hours later:

    When I first started doing TDD (.Net) I hand rolled all my mocks/stubs and that was great because I was just learning the basics of TDD. Introducing a mocking framework at that point would have only frustrated and confused me.

    That being said, once I stopped to ask myself the question “There has got to be a better way…” I found RhinoMocks. I now use only a speckling of hand rolled mocks, but it is done to make my life easier. Hand rolling is great for specific scenarios where a mocking framework would over complicate stuff, but it tends to be the exception not the rule.

    It is worth noting however, that there is still a chunk of “pre-RhinoMocks” test code filled with hand rolled mocks that is rarely touched. That at least speaks to what Bob was getting at when he said that our interfaces should rarely change.

  15. Avatar
    Reflective surface about 13 hours later:

    Anyone who continues to think that using a mocking framework slows you down is living in the stone age. Sorry, that’s just the truth. Using a mocking framework does not slow you down, it speeds you up.

    Look, using a mocking framework is not my religion, it is one of my disciplines. It’s like dual entry bookkeeping for accountants, or sterile procedure for surgeons. Professionals adopt such disciplines because they understand the theory behind them, and have directly experienced the benefits of using them.

    I have experienced the tremendous benefit that using a mocking framework has had in my work, and I have observed it in others. I have seen and experienced the way that using a mocking framework helps programmers conceive their designs. I have seen and experienced the way it documents their decisions. I have seen and experienced the decouplings imposed by the tests, and I have seen and experienced the fearlessness with which people using a mocking framework can change and clean their code.

    To be fair, I don’t think using a mocking framework is always appropriate. There are situations when I break the discipline and handroll mocks. I’ll write about these situations in another blog. However, these situations are few and far between. In general, for me and many others, using a mocking framework is a way to go fast, well, and sure.

    The upshot of all this is simple. Using a mocking framework is a professional discipline. Using a mocking framework works. Using a mocking framework makes you faster. Using a mocking framework is not going away. And anyone who has not really tried it, and yet claims that it would slow them down, is simply being willfully ignorant. I don’t care if your name is Don Knuth, Jamie Zawinski, Peter Seibel, or Peter Pan. Give it a real try, and then you have the right to comment.

    Let me put this another way. And now I’m talking directly to those who make the claim that using a mocking framework would slow them down. Are you really such a good programmer that you don’t need to thoroughly mock your work? Can you conceive of a better way to check your work than to express your intent in terms of an executable mock test? And can you think of a better way to ensure that you can write that mock test other than to mock it using a framework?

    If you can, then I want to hear all about it. But I don’t want to hear that you handrolled a few mocks after the fact. I don’t want to hear that you manually check your code. I don’t want to hear that you do design and therefore don’t need to use a mocking framework. Those are all stone-age concepts. I know. I’ve been there.

    So there.

  16. Avatar
    Dagfinn Reiersøl about 14 hours later:

    @Steve Freeman: Thanks, I want opposition to the idea that spies are superior to mocks, since I haven’t really discussed it much. Do you have any examples that would make your position clearer? I admit I haven’t actively sought to compare the two side by side. What seems clear to me is that spies 1) can test anything a mock can test 2) make it easier to test complex objects that are passed to them, since it’s easier to test an actual object than to specify what you expect of a hypothetical object and 3) make for a more natural sequence in the test itself and lend themselves to refactoring to given-when-then.

  17. Avatar
    Stone Age Programmer about 14 hours later:

    Great comment by Reflective Surface.

    Nevertheless, this was a balanced article from Uncle Bob. It seems that the experience of the TDD articles has led to this toning down of unsubstantiated claims from Uncle Bob. [Who says an old dog can’t learn new tricks? :-)]

  18. Avatar
    Esko Luontola about 16 hours later:
    Dagfinn Reiersøl said:

    Thanks, I want opposition to the idea that spies are superior to mocks, since I haven’t really discussed it much. Do you have any examples that would make your position clearer?

    One point that I’ve noticed with regards to mocks and spies, is that organizing the tests in a self-documenting way is easier with spies.

    In a typical mock framework, you set the expectations for a mock in the test setup. When multiple tests use the same setup, then all of those tests fail when one of the expectations fails. So the tests are not isolated (http://agileinaflash.blogspot.com/2009/02/first.html) so that each test would specify only one behaviour, so that each test would have only one reason to fail. Also, the behaviour tested by the expectations is not immediately visible, unless the expectations are extracted to their own method (which is then called from the setup), which in turn makes the test code’s structure messy, and does not make the expectations visible in the test output the same way as all other test methods.

    Here is an example of how I’ve written the same tests using Mockito (a spy framework) and EasyMock (a mock framework). Make a diff between these two to see the difference:

    http://github.com/orfjackal/tdd-tetris-tutorial/blob/step7-done/src/test/java/tetris/RemovingFullRowsTest.java http://github.com/orfjackal/tdd-tetris-tutorial/blob/step7-done/src/test/java/tetris/easymock/EasyMockExample_RemovingFullRowsTest.java

    In the EasyMock version there are lots of compromises that had to be made, in order to make the tests read like a specification:

    - In the first two fixtures, the expectations had to be extracted to their own method and called from the setup, in order to make it clear that what is the behaviour being specified. This way it’s possible to see the intent when reading the test code, but it won’t be visible in the test output when the tests are run.

    - In the last fixture, the test structure had to be reordered very much. In the other tests the “Arrange” and “Act” are done in the fixture setup, and each “Assert” is done in the fixture’s tests. But in this case the “Act” had to be moved away from the setup. Also an ugly comment was necessary.

    In short, the use of a mock framework forces a different kind of style of testing on the programmer, so that writing tests in the preferred style is very hard or even impossible. But a spy framework makes it possible to write tests in the same state-based style as all the other tests, while at the same time getting the benefits of interaction-based verification.

  19. Avatar
    Robert Penner about 17 hours later:

    A mock does verification. You’re not mocking, you’re stubbing.

  20. Avatar
    Lior Friedman about 17 hours later:

    I can see the benefit of rolling out manual mocks in very simple scenarios. however i do think that in most cases using a mocking framework actually increases the test readability: 1) As Steeve mentioned, anyone having minimal experience with any mocking framework will find the two tests equally understandable. And since mocking frameworks are useful all professional should posses such minimal understanding.

    2) using a framework brings together the test and the fakes behavior, I found this improves my understanding of the test. I think it relates to the fact that this tends to make the test linearly readable (no need to jump to and back to the fake actual code)

  21. Avatar
    Kyle Szklenski about 17 hours later:

    Reflective Surface’s comment was NOT good. It was terrible. No one, not Bob and no one in the comments as far as I can remember (pretty busy right now, so may have missed/forgot one), said anything about using mocking frameworks making you go slower. It was about the expressivity of the test, and how using mocking frameworks often makes them look much uglier, and harder to read.

  22. Avatar
    Bill Sorensen about 18 hours later:

    It depends. Sometimes hand-rolled stubs are easier, other times an isolation/mocking framework can save significant effort. Especially when you have to test behavior (I’d much rather test state, but sometimes you have to), a mocking framework will verify your assertions for you. I’ve hand-written mocks, and these classes can get out of hand quickly.

    If your test has too many dots and parens, why not extract the mock creation out into a getFalseMatcher() method? That gives you the best of both worlds.

  23. Avatar
    Josh Brown 1 day later:

    Along the lines of what Ben said – for simplicity, I like to create my own mocks/stubs when I’m testing Java code, but when I have the option, I like to create them in Groovy. Groovy makes mocking/stubbing so much easier and cleaner than Java, and allows you to use metaClass to pick and choose which methods to replace.

  24. Avatar
    Uncle Bob 1 day later:

    Reflective surface about 13 hours later:

    Anyone who continues to think that using a mocking framework slows you down is living in the stone age.

    <grin>

  25. Avatar
    msuarz 1 day later:

    The second test hides the nastiness inside a fake class called FalseMatcher … It is easy to refactor the first test into a method FalseMatcher() or something cool like Actor.FalseMatcher and hide in there the invation of dots and parenthesis. Eg refactor into FalseMatcher()

    public FalseMatcher falseMatcher() {
      Matcher falseMatcher = mock(Matcher.class);
      when(falseMatcher.match(anyObject())).thenReturn(false);
      return falseMatcher;
    }
    @Test
    public void falseMatcherShouldSelectNoElements_mockist() {
      Selector selector = new Selector(falseMatcher());
      List selection = selector.select(list);
      assertThat(selection.size(), equalTo(0));
    }
  26. Avatar
    Joseph Gutierrez 1 day later:

    When doing .NET I use Rhino. I haven’t seen anybody talk about using dynamic mocks.

    When TDDing JavaScript, I roll my own because of the use of closures. Functions being first-class definitely makes my life easier and less of a debate of using classicist/mockist.

  27. Avatar
    Philip Schwarz 3 days later:

    @Reflective Surface Hats off to your choice of name: its irony only struck me as I finished typing this.

    @Kyle Szklenski You Said: Reflective Surface’s comment was NOT good. It was terrible.

    If your post is genuine, e.g. you are not the same person as Reflective Surface, or an accomplice of his, then note that his comment was obtained from Uncle Bob’s Echoes from the Stone Age post simply by replacing ‘TDD’ with ‘mocking’ framework.

    Otherwise… Reflective Surface: I have just fallen victim to your artifice.

  28. Avatar
    J. B. Rainsberger 3 days later:

    Oh, Bob…. http://bit.ly/2RAMoH

  29. Avatar
    Philip Schwarz 3 days later:

    In The Art of Unit Testing, which according to Michael Feathers (who wrote the Foreword) is ‘an important title that should have been written years ago’, Roy Osherove, the author, says:

    Although there are many advantages to using isolation frameworks [a set of programmable APIs that make creating mock and stub objects much easier], there are some possible dangers too. Some examples are overusing an isolation framework when a manual mock object would suffice, making tests unreadable because of overusing mocks in a test, or not separating tests well enough.

    He also says:

    Learn how to use the advanced features of an isolation framework… and you can pretty much make sure that anything happens or doesn’t happen in your tests. All you need is for your code to be testable.

    You can also shoot yourself in the foot by creating overspecified tests that aren’t readable or will likely break. The art lies in knowing when to use dynamic versus handwritten mocks. My guideline is that, when the code using the isolation framework starts to look ugly, it’s a sign that you may want to simplify things. Use a handwritten mock, or change your test to test a different result that proves your point but is easier to test.
  30. Avatar
    Philip Schwarz 3 days later:

    @Franco Lombardo

    Which assertion better communicates that ‘it is true that the selection size is zero’ ?

    If we use

    assertEquals(0, selection.size()); 
    

    it reads as ‘it is true equals zero selection size’. Not too clear. Partly because ‘equals’ is used as a prefix operator, as in the LISP-like (= a b), and partly because the result operand comes before the computation operand, as in the LISP-like (= result computation).

    If we use

    assertThat(selection.size(), equalTo(0)); 
    

    it reads as ‘it is true that selection size equal to zero’. That is clearer. The equals is now in infix position, as in a = b, and the computation comes before the expected result: computation = result. But we can do better.

    If we use

    assertThat(selection.size(), is(equalTo(0))); 
    

    it reads as ‘it is true that selection size is equal to zero’, which is pretty much what we are trying to communicate.

    Which one do you prefer?

    As it says in this Hamcrest tutorial, the ‘is()’ matcher is pure syntactic sugar, to make your tests as readable as possible.

  31. Avatar
    Erik Przekop 3 days later:

    I think the comments point out clearly that this is a “religious” argument to some extent.

    I use EasyMock very often, and I think I need to write more hand-rolled mocks / stubs. At the very least I need to try it and see how well it works for a given situation.

    I certainly don’t agree with the assertion that boils down to “good programmers should be able to read code using mocks” (which is what I took away from Reflective Surface’s post). That’s as bad as saying “it was hard to write, so it should be hard to read.”

    If a mediocre programmer can’t make sense of your code, then it could (and usually should) be written more clearly.

    I really need to give Mockito a try, though. I’m not very keen on doing behavior-based verification unless I absolutely have to. My (admittedly stone-aged) mind finds it much easier to understand tests that verify state.

  32. Avatar
    Philip Schwarz 4 days later:

    @Uncle Bob

    In The Art of Unit Testing, Roy Osherove says:

    In a test where you test only one thing (which is how I recommend you write tests), there should be no more than one mock object. All other fake objects will act as stubs. Having more than one mock per test usually means you are testing more than one thing, and this can lead to complicated or brittle tests.

    Your test credentialsShouldBeNonNullIfServiceNamePresent conforms to this practice: it has one mock called manager, and two stubs called gssName and gssCredential.

    Do you think it would enhance readability to have mock names contain ‘mock’, and stub names containing ‘stub’, like in the Apps flavour of Hungarian Notation?

    e.g. 1: mockManager, nameStub and credentialStub
    e.g. 2: mockManager, stubbedName and stubbedCredential.

    We would then have:

    when(mockManager.createName(anyString(), (Oid) anyObject(), (Oid) anyObject())).thenReturn(stubbedGssName);
    ...
    when(mockManager.createCredential((GSSName) anyObject(), anyInt(), (Oid) anyObject(), anyInt())).thenReturn(stubbedGssCredential);
    ...
    NegotiateAuthenticator authenticator = new NegotiateAuthenticator(mockManager, properties);
    ...
    verify(mockManager).createName("service", serviceNameType, mechanism);
    ...
    verify(mockManager).createCredential(stubbedGssName, GSSCredential.INDEFINITE_LIFETIME, mechanism, GSSCredential.ACCEPT_ONLY);
    ...
    assertEquals(stubbedGssCredential, authenticator.getServerCredentials());
    

    This could also help to quickly check that there is no verification of methods called on stubs.

  33. Avatar
    <a href="http://www.questia.com/questialibraryplus">Questia App</a> 4 days later:

    It is only the text, Which i can understood, however, programming code has just gone above my brain. Indeed, this would be a great idea to be used in Twitter.

  34. Avatar
    Chris Morris 5 days later:

    Vindication? http://clabs.org/blogki/index.cgi?page=/ComputersAndTechnology/DiyMocks

    JB didn’t agree with me either …

  35. Avatar
    sikis about 1 month later:

    bu kodlar ne i?e yar?yor bi anlam veremedim?

  36. Avatar
    dungeon fighter gold about 1 month later:

    thank you for sharing.

  37. Avatar
    Jack 2 months later:

    FUCK YOU!

  38. Avatar
    John Erickson, Cousins Subs, 2 months later:

    SHUT YOUR GOD DAMN MOTHER FUCKING PUNK ASS MOUTH JACK YOU FAG FUCK YOU DON’T KNOW WHAT THE FUCK YOU ARE YAPPING ABOUT.

  39. Avatar
    Ga,es365 4 months later:

    I prefer to work on game programming.

  40. Avatar
    UGG Classic Metallicaz` 5 months later:

    welcome to http://www.uggboots4buy.com/ l,will have a unexpection.

  41. Avatar
    Kooba Handbags 5 months later:

    Living without an aim is like sailing without a compass. with a new http://www.handbags4buy.com/ idea is a crank until the idea succeeds.

  42. Avatar
    highkoo ugg boots 5 months later:

    all products are high quality but low price,welcome to http://www.uggjordanghd.com/.

    >
  43. Avatar
    moncler clearance 5 months later:

    Very quietly I take my leave.To seek a dream in http://www.edhardy-buy.com/ starlight.

  44. Avatar
    ShAaNiG 5 months later:

    great info mate. will read it. thanks in advance

    Prudential West

  45. Avatar
    ShAaNiG 5 months later:

    On the other hand, spies are superior to mocks in every conceivable way as far as I can tell. That might give you additional incentive to hand code, since mock frameworks often aren’t capable of generating spies.

    Wholesale Brand Name Clothing

  46. Avatar
    ShAaNiG 6 months later:

    I think that too often we get carried away by shiny things, and forget that there may be less sexy, but more practical ways of achieving tasks.

    Wholesalers

  47. Avatar
    Nex 6 months later:

    I prefer to work on game programming.

  48. Avatar
    Daniel 7 months later:

    I belong to the classical camp and am happy that someone who professes to not belong to either camp has presented a very comprehensive look at mockism. I may not shift camps sometime soon but I will give your suggestions a try.

    Fruitarian Diet

  49. Avatar
    yosisi 8 months later:

    http://www.kefpo.co.il thanks about it

  50. Avatar
    Kevin Durant jerseys 8 months later:

    I may not shift camps sometime soon but I will give your suggestions a try.

  51. Avatar
    Hoop skirt 9 months later:
  52. Avatar
    Buzzword 9 months later:

    Summer is very hot, who can wear article 7 minutes of pants, must the cowboy oh, the best side or a small beads embroidery that paillette, or color, the best is shallow blue, body parts, the condole belt unlined upper garments grows out of a piece of short sweater, small hollow-out sweater is better, there is colour with cream-colored, white, give priority to, in a few pieces of bright, very pretty, tie-in use: oh!!!!!!!!!!!

  53. Avatar
    ?????? ???? 9 months later:

    thanks about it

  54. Avatar
    jix 10 months later:

    I prefer to work on game programming.

  55. Avatar
    cheap vps 10 months later:

    Hand rolling is ridiculous when dealing with interfaces that have more than a couple methods defined within them, I don’t care how much the IDE fills in for me. That’s like saying “I don’t need Generics/Templates because the IDE/Resharper/CodeSmith can just generate what I need.” It just adds to the cruft that I have to skip over/ignore.

    As for “dancing”, any checks a Mock does should be as simple and generic as possible. But asserting that key methods are called, and equally important “not” called in a given scenario is important. I.e. if in a normal path dependency A is called to perform an action, and you are asserting behaviour on an alternate path, then the mock can, and should report back a failure if that action is attempted when it shouldn’t have been.

  56. Avatar
    Free Domain Hosting 10 months later:

    This is a very intriguing post, I was looking for this knowledge. Just so you know I found your web site when I was searching for blogs like mine, so please check out my site sometime and leave me a comment to let me know what you think. Free Domain Hosting

  57. Avatar
    dupont lighter 10 months later:

    dupont lighter, dupont lighters, st dupont lighter, s.t. dupont lighters. Great post,just as Great belts Sale time,you will enjoy the shopping time by belts Sale online store,and buy belts from belts Sale online store. Price Guarantee, sale now.time limited.seize the chance.

  58. Avatar
    supplynflshop 10 months later:

    so good post i like it china nfl jerseys

  59. Avatar
    games10 10 months later:

    Great post. But I prefer to work on game programming

  60. Avatar
    topgames 10 months later:

    Thanks for this post, thanks for sharing.

  61. Avatar
    ????? ????? 10 months later:

    Thank fo posting interest post like this. when we win another post from you?

  62. Avatar
    bag manufacturer 11 months later:

    of something I tweeted early this morning (follow @unclebobmartin). In my tw

  63. Avatar
    hilda_dada 11 months later:

    I like your blog,and also like the article,and thank you for provide me so much information :))

    tampa family law

  64. Avatar
    shipuzim 12 months later:

    Thanks for this post, thanks for sharing.

  65. Avatar
    Jocuri 12 months later:

    I preffer playing a flash game…programming is difficult.

  66. Avatar
    Alloggio Bucarest 12 months later:

    That was some serious cleaning up. I was struggling to read the original test method: too busy. You have turned a single test with two stubs and 5 assertions into three straightforward tests, each with only one or two assertions, and only one of which uses a stub. Alloggio Bucarest

  67. Avatar
    tachsitim 12 months later:

    nice sharing’ keep going like that

  68. Avatar
    Tenant Screening 12 months later:

    This is such a good information. Thanks for sharing this to us.

  69. Avatar
    architecture service about 1 year later:

    If we need more secure and simple, using this card is the answer. All in one card. As our identity and as our payment check.

  70. Avatar
    vindex about 1 year later:

    thanks about it

  71. Avatar
    stratomedia about 1 year later:

    I may not shift camps sometime soon but I will give your suggestions a try.

  72. Avatar
    ??? about 1 year later:

    thanks about it

  73. Avatar
    chanel store about 1 year later:

    I hope to leave my comments here. Thank you

  74. Avatar
    sidhedent about 1 year later:

    I’m great success and everyone

  75. Avatar
    moncler about 1 year later:

    Very few has the knack of writing such beautiful post like you do.. !!moncler mens I have been following this blog and i feel different energy while reading your post. Keep it dear buddy.. !!moncler women

  76. Avatar
    spa2b about 1 year later:

    Today the most powerful thing you can build a website publishers to promote other sites have to win a lot of money leads

  77. Avatar
    yogaindex about 1 year later:

    ?? ??? ?? ?? ?? ?? ???? ?? ?

  78. Avatar
    polo shirts about 1 year later:

    You are absolutely right about this, both the parties are to blame. And with the financial crisis all around the world the employers are just taking benefit of their employees.

  79. Avatar
    spaclub about 1 year later:

    I wanted to say a web of well-developed field has a lot of money in the world.

  80. Avatar
    ?????? ??????? about 1 year later:

    I wanted to know how much a new hd tv

  81. Avatar
    Moncler about 1 year later:

    http://www.monclerleather.com/

  82. Avatar
    Pandora about 1 year later:

    The replies were numerous and vociferous. Dave Astels poignantly stated that hand-rolling mocks is so 2001!

  83. Avatar
    artstone about 1 year later:

    It’s amazing all this blog has a tremendous quality information Happy New Year 2011

  84. Avatar
    Games about 1 year later:

    yes, i think too its very good post. thank you about it

  85. Avatar
    mishlohim about 1 year later:

    i love it! the best post that i read on this…...

  86. Avatar
    glass about 1 year later:

    loved it! thank u…....

  87. Avatar
    dan about 1 year later:

    gr8 post thanks a lot for sharing it with us!

  88. Avatar
    ost soundtrack about 1 year later:

    Good job done about the post, thank you!

  89. Avatar
    Name Necklaces about 1 year later:

    When doing .NET I use Rhino. I haven’t seen anybody talk about using dynamic mocks.

  90. Avatar
    Mattress about 1 year later:

    I wanted to wish good glass good year a successful year in 2011 will be double happiness health income members

  91. Avatar
    sabres-h about 1 year later:

    It is important to realize dreams to want next year will be a successful year of health and of course peace in the world Good luck to al

  92. Avatar
    http://www.blacktowhiteiphone4.com about 1 year later:

    Take the latest white iphone 4 Conversion Kit and start to change a new look to your favorite iphone 4 now! You can sure love it!

  93. Avatar
    moncler about 1 year later:

    Moncler is well known for Moncler Jackets while Moncler Vest is also a considerable hot product.

  94. Avatar
    Silicone Molding about 1 year later:

    Mold making is the core business of Intertech (Taiwan). With world level technology, Intertech enjoys a very good reputation for making Injection Mold and Plastic Moldsfor their worldwide customers.

  95. Avatar
    Silicone Molding about 1 year later:

    Intertech Machinery Inc. provides the most precise Plastic Injection Mold and Rubber Molds from Taiwan. With applying excellent unscrewing device in molds, Intertech is also very professional for making flip top Cap Molds in the world.

  96. Avatar
    ????? ????? about 1 year later:

    ?? ?? ?? ??? ??? ??? ?? ? ??? ??? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ???

    ?? ?? ?? ??? ??? ??? ??? ?? ? ??? ? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ??? ?????

    ?? ?? ?? ??? ??? ??? ??? ?? ? ??? ? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ??? ?????

    ?? ?? ?? ??? ??? ??? ? ?? ?? ? ??? ??? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ? ?? ??? ???

    ?? ?? ?? ??? ??? ??? ?? ?? ? ??? ??? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ?? ??? ???

    ?? ?? ?? ??? ??? ??? ??? ?? ? ??? ? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ??? ?????

    ?? ?? ?? ??? ??? ??? ??? ??? ?? ? ??? ??? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ??? ??? ???

    ?? ?? ?? ??? ??? ??? ??? ??? ?? ? ??? ??? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ??? ??? ???

    ?? ?? ?? ??? ??? ??? ??? ? ?? ?? ? ??? ? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ? ?? ??? ?????

    ?? ?? ?? ??? ??? ??? ??? ?? ?? ? ??? ? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ???? ??? ???

    ?? ?? ?? ??? ??? ??? ??? ??? ?? ? ??? ??? ?? ?? ???? ?? ??? ?? ???? ? ?? ?? ??? ??? ??? ??? ??? ???

  97. Avatar
    ??????? about 1 year later:

    and keep going like thet :)

  98. Avatar
    highlights vs goals about 1 year later:

    this man up made laugh me ? ?? : D

  99. Avatar
    lock about 1 year later:

    i love it! the best post that i read on this……

  100. Avatar
    Josh about 1 year later:

    great idea you gave here, thanks! ?? ????

  101. Avatar
    Harrishcolin about 1 year later:

    I really appreciate posts, which might be of very useful my blogs: cityville cheats | cityville tips

  102. Avatar
    ???????? about 1 year later:

    thanks

    ????

  103. Avatar
    spa about 1 year later:

    thanks you men fo help good year

  104. Avatar
    Criminal Check about 1 year later:

    This is just a nice sample code to learn on.

  105. Avatar
    US Criminal Record about 1 year later:

    I really apprciate this. This is the best post that i read on this blog.

  106. Avatar
    longview real estate about 1 year later:

    It depends. Sometimes hand-rolled stubs are easier, other times an isolation/mocking framework can save significant effort. Especially when you have to test behavior (I’d much rather test state, but sometimes you have to), a mocking framework will verify your assertions for you. I’ve hand-written mocks, and these classes can get out of hand quickly. longview real estate

    If your test has too many dots and parens, why not extract the mock creation out into a getFalseMatcher() method? That gives you the best of both worlds.

  107. Avatar
    Couple Therapy about 1 year later:

    best post …

  108. Avatar
    Mattress about 1 year later:

    very good year best post

  109. Avatar
    iPad ePub Transfer for Mac about 1 year later:

    I really like this essay. Thank you for writing it so seriously. I want to recommend it for my friends strongly. iPad ePub Transfer for Mac is a Professional transfer that can transfer the ePub books onto your iPad on Mac and export the iPad ePub to Mac local folder.

  110. Avatar
    iPad to mac transfer about 1 year later:

    Thanks for shareing! I agree with you. The artical improve me so much! I will come here frequently. iPad to Mac Transfer lets you transfer music, movie, photo, ePub, PDF, Audiobook, Podcast and TV Show from iPad to Mac or iPad to iTunes.

  111. Avatar
    ?????? about 1 year later:

    So much to read, so much wealth of good information, keep it up :)

  112. Avatar
    ???? ???? about 1 year later:

    i like this and totally agree with the writer. thanks for sharing.

  113. Avatar
    ???? ????? about 1 year later:

    thanks for a great post. I really enjoy reading it. Keep up with the good work.

  114. Avatar
    Discount NBA Jerseys about 1 year later:

    I haven’t seen anybody talk about using dynamic mocks.

  115. Avatar
    spa about 1 year later:

    I really like this forum Thank you for any help Happy New Year to all members

  116. Avatar
    smart battery charger about 1 year later:

    I am totally agree with your oppinion.this blog post is very encouraging to people who want to know

    these topics.

  117. Avatar
    dvirs about 1 year later:

    thank u so much, really great post!

  118. Avatar
    ven about 1 year later:

    Hello everyone I was wondering if Facebook helps you promote your business more

  119. Avatar
    ???? ????"? about 1 year later:

    Thanks for the script man, Man U R smart :)

    ?? ???? ? ??? ???”? ?? 5

  120. Avatar
    avi about 1 year later:

    Sending Balloons http://www.xn—5dbhbgkcpelb3a4h.co.il/

  121. Avatar
    avi about 1 year later:

    http://xn—5dbhbgkcpelb3a4h.co.il

  122. Avatar
    avi about 1 year later:

    Sending Balloons in Central Region ?? ??

  123. Avatar
    avi about 1 year later:

    Sending Balloons

  124. Avatar
    Criminal Records about 1 year later:

    And remember, hand-rolling often results in simpler tests without the litter of dots and parentheses!

  125. Avatar
    ?????? about 1 year later:

    i like this and totally agree with the writer. thanks for sharing.

  126. Avatar
    ghd australia about 1 year later:

    Growth hormone deficiency in Australia, teach you how to protect your hair curl and style hair salon in any way to rectify.

  127. Avatar
    ?????? ?????? about 1 year later:

    ??? ???? ?? ?? ?? ?? ?? ??? ?? ?? ??? ? ??? ?? ??? ?

    ?? ??

  128. Avatar
    Tenant Screening about 1 year later:

    Ct Credit Bureau is a nationwide, full service and accurate information for tenant screening, employment screening and mortgage credit reporting company.

  129. Avatar
    iPhone SMS to Mac Backup about 1 year later:

    Would you like to banckup iphone SMS to mac, macBook, macbookPro as .txt files? Now a software iphone SMS to Mac Backup can help you to realize it.

  130. Avatar
    ?????? ?????? about 1 year later:

    ?? ?? ?? ??? ????

  131. Avatar
    ytv about 1 year later:

    Would you like to banckup iphone SMS to mac thanks men

  132. Avatar
    wholesale hair extensions about 1 year later:

    just recently moved to Redondo Beach, CA. I am interested in getting a weave where none

  133. Avatar
    wholesale hair weave about 1 year later:

    of my hair is left out. I’ve been searching this forum for the past few weeks

  134. Avatar
    gucci shoes for men about 1 year later:

    that should be considered when you do an art work and also have proper knowledge that how to use all of them.

  135. Avatar
    women designer shoes about 1 year later:

    You can try and make your point without bashing the other team.

  136. Avatar
    prada shoes for men about 1 year later:

    I’ve definitely enjoyed reading through your thoughts. By any signifies I’ll be subscribing for a feed and I genuinely hope you write-up once more quickly….

  137. Avatar
    Criminal Search about 1 year later:

    I’m not very keen on doing behavior-based verification unless I absolutely have to. My (admittedly stone-aged) mind finds it much easier to understand tests that verify state.

  138. Avatar
    yoga about 1 year later:

    You are right about this subject Carchichim make changes

  139. Avatar
    ????? ????? about 1 year later:

    that’s some fine article

  140. Avatar
    jaychouchou about 1 year later:

    i actually love this show,, i think its really cool to do a little spin off of Addam’s

    life, i thought it was a little predictable but Craig Roberts hottness makes up for

    that XD lol xx Does anyone know when the next episode is put online,, i cant wait to watch it,, i just

    wish it was longer!! All the more time to nike shoes watch Addam make an embbaresment out of himself,, but in a fit way!! lol XD

  141. Avatar
    drbarr about 1 year later:

    good idea i like the porom

  142. Avatar
    cable ties about 1 year later:

    great ideas in here!

  143. Avatar
    cable ties about 1 year later:

    love the idea!

  144. Avatar
    ???????? about 1 year later:

    wonderfull post

  145. Avatar
    ??????? about 1 year later:

    awesommmmness

  146. Avatar
    ????? ????? about 1 year later:

    its not making any sense…

  147. Avatar
    ?????? ????? about 1 year later:

    call me stupid but i didnt understand it ..

  148. Avatar
    Designer Sunglasses about 1 year later:

    Buy $10 Replica Designer Sunglasses with 3-day FREE SHIPPING

  149. Avatar
    rosetta stone about 1 year later:

    rosetta stone http://www.rosettastonehouse.com/ rosetta stone

  150. Avatar
    christian louboutins about 1 year later:

    christian louboutins http://www.shoesfantasy.com/ christian louboutins

  151. Avatar
    Playstation 3 about 1 year later:

    Thank you for this post. If you like playstation 3 games, be sure to check my site.

  152. Avatar
    dswehfhh about 1 year later:

    We are the professional shorts manufacturer, shorts supplier, shorts factory, custom shorts.

  153. Avatar
    Yalova Emlak about 1 year later:

    Thank you very much for this blog.I like its.

  154. Avatar
    Chimney Repair NY about 1 year later:

    Thanks for sharing this information.But how can I know more about it.

  155. Avatar
    dory about 1 year later:

    great article, very useful information, thank you. Social Network

  156. Avatar
    http://www.tiffanyandcooutlet.net/ about 1 year later:

    Almost any situation--good or bad --is affected by the attitude we bring to. Adversity reveals genius; fortune conceals it. As fruit needs not only sunshine but cold nights and chilling showers to ripen it, so character needs not only joy but trial and difficulty to mellow it. Although the world is full of suffering, it is full also of the overcoming of it. tiffany and co outlet

  157. Avatar
    dr dre headphones about 1 year later:

    Thanks for sharing this information.But how can I know more about it.

  158. Avatar
    hire a virtual assistant about 1 year later:

    The said post here is very informative. I am impressed as to the ways in which the author delivered the message to us readers. I am curious as to the details and have read and got my answers to my query. It is nice to know that this one here really exist. I would love to track your future posts.

  159. Avatar
    hire a virtual assistant about 1 year later:

    The said post here is very informative. I am impressed as to the ways in which the author delivered the message to us readers. I am curious as to the details and have read and got my answers to my query. It is nice to know that this one here really exist. I would love to track your future posts.

  160. Avatar
    hire a virtual assistant about 1 year later:

    The said post here is very informative. I am impressed as to the ways in which the author delivered the message to us readers. I am curious as to the details and have read and got my answers to my query. It is nice to know that this one here really exist. I would love to track your future posts.

  161. Avatar
    iva debt management about 1 year later:

    iva debt management This weblog seems to get a good amount of visitors. How do you get traffic to it? It offers a nice individual spin on things. I guess having something real or substantial to post about is the most important factor.

  162. Avatar
    coach bags about 1 year later:

    good post and thanks for share

  163. Avatar
    loanbusiness about 1 year later:

    Excellent post. I want to thank you for this informative read I really appreciate sharing this great post. Keep up your work

  164. Avatar
    okey oyunu oyna about 1 year later:

    Code is useful.

    internette görüntülü olarak okey oyunu oyna, gerçek kisilerle tanis, turnuva heyecanini yasa.

  165. Avatar
    wholesale imitation jewelry about 1 year later:

    I preferred the cloud as it more underline a potentially complex dependency good system

  166. Avatar
    flower about 1 year later:

    i like it alot! great HTML code

  167. Avatar
    ford leveling kit about 1 year later:

    love this website , its very useful thanks.

  168. Avatar
    leveling kit ford about 1 year later:

    great website, i really love it, its very useful, thanks.

  169. Avatar
    leveling kit f250 about 1 year later:

    i love this blog, so nice. thanks for sharing.

  170. Avatar
    f350 leveling kit about 1 year later:

    i love this website one of the best, thanks for the post.

  171. Avatar
    real estate advertising about 1 year later:

    love this website , its very useful thanks

  172. Avatar
    http://www.medionakku.de/Medion-M-Akkus.htm about 1 year later:

    but it came Asus Eee PC 701 Akku back because Asus Eee PC 801 Akku your windows Asus Eee PC 900 Akku have good night Asus Eee PC 904 Akku Pearl sleep my angel Asus Eee PC 904HD Akku

  173. Avatar
    persite about 1 year later:

    very important thanks

  174. Avatar
    izoonim about 1 year later:

    Gr8, Didnt even know about mockito

  175. Avatar
    http://www.sigalram.co.il/ about 1 year later:

    tnx 4 the info

  176. Avatar
    HeidelBerg Parts about 1 year later:

    Very good I will recommended to more friends.Good luck! http://www.gzqiyue88.com/">HeidelBerg Parts http://www.gzqiyue88.com/">Printing Spare Parts

  177. Avatar
    http://www.loliki.co.il/ about 1 year later:

    ?? ? ???? ?? ? ? ???? ??? ??? ? ??? ?? ?? ?? ??? ? ???? ???? http://www.loliki.co.il/ ?? ??? http://www.loliki.co.il/index.php?main_page=index&;cPath=35

    ?? ?? ???

  178. Avatar
    Jewellery about 1 year later:

    Online UK costume and fashion jewellery shop with, Online UK costume and fashion jewellery shop with, Online UK costume and fashion jewellery shop with,

  179. Avatar
    http://www.clairerabin.co.il/ about 1 year later:

    this is “machon cleyer rabin”: http://www.clairerabin.co.il/ very good ya? ya? ya? ok, http://www.clairerabin.co.il/treatments/couples-therapy/

    http://www.clairerabin.co.il/about/

    http://www.clairerabin.co.il/treatments/family-consulting/

  180. Avatar
    bodybuilding about 1 year later:

    You completed a number of nice points there.

  181. Avatar
    ???????? about 1 year later:

    no over load method for : Matcher falseMatcher = new Matcher() {};?

  182. Avatar
    wedding planner delhi about 1 year later:

    I am happy to find so many useful information here in the post, thanks for sharing it here. I hope you will adding more.

  183. Avatar
    ven about 1 year later:

    Hello friends I wanted to be friends here and I enjoy the forum Thanks for any help here a good week

  184. Avatar
    Burberry Bags Outlet about 1 year later:

    Burberry Bags Outlet

  185. Avatar
    Crystal Jewellery about 1 year later:

    Great post! Nice and informative, I really enjoyed reading it and will certainly share this post with my friends . Read everything you ever wanted to know about promise rings and the meaning of promise rings/a>

  186. Avatar
    beats by dre store about 1 year later:

    here and I enjoy the forum Thanks for any help here a good weekhigh quality headphones new design headphones

  187. Avatar
    Indonesia about 1 year later:

    This is a thing I need to study on further.

  188. Avatar
    Online Games about 1 year later:

    Object Mentor

  189. Avatar
    T-shirt stores about 1 year later:

    HuangXiao surplus think gymnastics and fashion in her speaking complement each other, gymnastics is full of petr cech itself design changes T-shirt stores and inspiration, so she’s graduation work also is a gymnastics, and he came to different parts of the world DuoNian in gymnastics competition, but also to her to experience different cultures, and expand the horizons of their own design.

    As Hong Kong the highest level of women’s gymnastics athlete, in addition to the Olympic Games this year, at the age of 24 HuangXiao surplus what game in, and that is also graduated from the www.t-shirtsgo.com/">cheap t-shirts university last year of the last time she in the world university games. Don’t say don’t know, original HuangXiao surplus last year in the Hong Kong polytechnic university graduate, major is fashion design, although after the graduation HuangXiao surplus temporarily when a professional athlete, but she told the reporter, you actually or want to be professing clothing designers, so is looking for work. In my spare time, she will also test NiuDao, such as design some to gymnastics as the theme of the T-shirt, this www.t-shirtsgo.com/">wholesale t-shirts year’s gymnastics championship will be held in Hong Kong, she is involved in the game T-shirt design, very happy.

  190. Avatar
    kamin realis about 1 year later:

    ??

  191. Avatar
    spa about 1 year later:

    Everyone had a good week and crossed a good living healthy businesses all members of the blog.

  192. Avatar
    Jordan Hats about 1 year later:

    Recently established in 2006, http://www.snapbackhatcaps.com is the website of a company that has been in business in the Chinese market for about 3 years. They are Cheap Snapback Hats manufacture in china, The company specialize in supplying Wholesale Snapbacks Hats, such as Wholesale Snapbacks, NBA Snapback Hats, NFL Snapback Hats, NHL Snapback Hats and so on. They pay attention to their products quality and service.

  193. Avatar
    Hayokra about 1 year later:

    thanks about this good post. Everyone had a good week and crossed a good living healthy businesses. accept with spa

  194. Avatar
    garyme about 1 year later:

    Parentheses and dots are symbols most commonly used in data encoding. This is an awesome post. Thank you for posting. sonicare diamondclean best price

  195. Avatar
    Cheap Moncler Vest about 1 year later:

    Seo.adosgrup.com.tr – Seo, Search engine optimization, Arama motoru optimizasyonu

  196. Avatar
    Cheap Louis Vuitton Outlet about 1 year later:

    really great post i think that this is a nice way to work.

  197. Avatar
    Louboutins about 1 year later:

    asdas d+0fs a+ssss55

  198. Avatar
    moncler about 1 year later:

    asdfas+d 0f9s9+89s6s6

  199. Avatar
    Christian about 1 year later:

    ass dfgd78s978s8sss

  200. Avatar
    moncler jacken about 1 year later:

    Moncler shorter coat will be founded for at equivalent time genders moncler jackenand would definitely be a evidence for the process brute within of the people, moncler jackenthat is definitely substantially appreciated by all of. every particular person and everybody who possess a Moncler jacket crown knows just what process will be moncler jackenand holding these sorts of apparels is really a marking in the classy plus sassy person.moncler jacken how you dress way up is the way one usually judges your lifestyle and in case you actually add some Moncler crown for the attire, moncler jackenchances are you’ll probable always be reflecting your personal self as becoming moncler baumeany gentleman and also women which includes tastes and magnificence.

  201. Avatar
    discount north face jackets about 1 year later:

    You need to be careful when buying discount north face jackets from the north face outlet online,where anything goes.

  202. Avatar
    ??????? about 1 year later:

    thanks. dots are very persistent.

  203. Avatar
    ??????? about 1 year later:

    Manual Mocking is really different nowadays than the time you wrote this post. I hope also other things will change too.

  204. Avatar
    getmarrie about 1 year later:

    The world is a wonderful new day there’s something amazing

  205. Avatar
    ytvinfo about 1 year later:

    You’re a hundred percent so how long we can live another 100 years ahead

  206. Avatar
    zimmerlove about 1 year later:

    I wish it would happen that we can live more happily for many years

  207. Avatar
    spaland about 1 year later:

    I believe it will happen we jump at every medicine every year there’s something new

  208. Avatar
    sweet4fun about 1 year later:

    I think the world wants it it was like in the movies all come true at the end

  209. Avatar
    xsw123 over 2 years later:

    ??? ????1856??????????? ????????1835??????????? 1924??” ??? ????”??????????????????????????? ??????????? ??? ? ( Burberry) ??? ??????1856????????? ??? ???????????? ??? ??????????????????? ???????????? ? ??????????? ??? ???.
    ?? ?? ??????????????? ?? ?????????? ?? ?1968??????? ?? ???????????? ????????? ?? ???????? ?? ??????? ?? ??????? ?? ???????? ?????? ?????5 ?????????TOMS ??????????? ????????????????????????? ????????????Supra ????????? ?????????????? ??????

  210. Avatar
    christian louboutin over 2 years later:

    Great post, please write more about this, and I like it. I really enjoy reading your blog popular distributed: a good article waiting for you! Greate post,please write more about this,and I like it,I really enjoy reading you blog popular distributed: a good article waiting for you!

  211. Avatar
    christian louboutin over 2 years later:

    Great post, please write more about this, and I like it. I really enjoy reading your blog popular distributed: a good article waiting for you! Greate post,please write more about this,and I like it,I really enjoy reading you blog popular distributed: a good article waiting for you!

  212. Avatar
    Bea over 2 years later:

    This is a cool post. Too much symbols is a distraction. It may not be so interesting. This offer is so interesting. brother pe770 reviews

  213. Avatar
    Cheap Beats By Dre over 2 years later:

    bus today, make them Cheap Beats By Dremiserable. One said: “I ??am really unlucky it! I was packed Beats By Dre Studioin the car to flow production.” One said: “I ??called Beats By Dre Soloit bad luck! In I was packed car are pregnant.Beats By Dre Pro

    Classic joke: I TVU A university studentbeats by dr dre caught by the enemy, the enemy tied him at the poles,just beats solo headphones purple and then asked him: say, where are you? You do not say it electrocuted! Scheap dr.dre beats studio headphones balck/yellowtudents back to the enemy a word, the result was electrocuted, he said: I am TVU.Hot sale beats by dr dre pro headphones

  214. Avatar
    xpt over 2 years later:

    Thank you for all your help Cool blog really impressive

  215. Avatar
    win4u over 2 years later:

    Thank you for all your help Cool blog really impressive

  216. Avatar
    travels over 2 years later:

    Cool information you are right there

  217. Avatar
    yoga over 2 years later:

    The most important thing is to maintain a high level of information people posts here and that makes the excellent site thanks

  218. Avatar
    4x4center over 2 years later:

    Most think we are healthy and the money not the most important in life

  219. Avatar
    Pablo M over 2 years later:

    I think that even

    assertTrue(selection.isEmpty());

    is cleaner than

    assertThat(selection.size(), equalTo(0));

  220. Avatar
    Cheap North Face Jackets over 2 years later:

    The perfect winter insulation should be ultra warm, extremely light and packable, and stay warm when wet. Cheap North Face Jackets For Women No single insulation-not the classic goose down, not the best efforts of synthetic insulation makers-has met all three of those criteria, Cheap North Face Jacketsand folks Cheap Womens North Face Jacketslike hikers, skiers, and snowboarders have had to settle. But North Face claims its newest jacket technologyis the perfect compromise.

  221. Avatar
    avi over 2 years later:

    ?? ????

  222. Avatar
    iPhone contacts backup over 2 years later:

    We don’t know when it will crashed and how the data and contacts lost on iPhone. So, the best way is backuping them to computer. So u can retrieve them when necessary.

  223. Avatar
    Polo Ralph Lauren Pas Cher over 2 years later:

    Thanks for this beautiful website. I have enjoyed reading through a few of the articles.

  224. Avatar
    iPhone sms to Mac backup over 2 years later:

    Yes. that’s right. We should follow your advice and do something to impove the program skill.

  225. Avatar
    iPhone sms to Mac backup over 2 years later:

    Yes. that’s right. We should follow your advice and do something to impove the program skill.

  226. Avatar
    iPhone sms to Mac backup over 2 years later:

    Yes. that’s right. We should follow your advice and do something to impove the program skill.

  227. Avatar
    clarkreed over 2 years later:

    Thanks for the information, I’ll visit the site again to get update information action figures

  228. Avatar
    pune tourism over 2 years later:

    I havent any word to understand this post….. Really i am impressed from this article…. the person who create this post it was a great human.. Thanks for shared this around.

  229. Avatar
    sports field grass over 3 years later:

    Guess I will have to continue studying yours and pray that someday I will write on a subject with as a lot wisdom as you have!

    sports field grass

  230. Avatar
    Injection Mold over 3 years later:

    Intertech Machinery Inc. provides the most precise Plastic Injection Mold and Rubber Molds from Taiwan. With applying excellent unscrewing device in molds,

    Intertech is also very professional for making flip top Cap Molds in the world. Mold making is the core business of Intertech (Taiwan). With world level technology, Intertech enjoys a very good reputation for making Injection Mold and Plastic Molds for their worldwide customers.

  231. Avatar
    http://www.maxmaraoutlet2012.com/ over 3 years later:

    you have a good karen millen outlet, thanks so much! http://www.karenmillenoutletes.co.uk/

  232. Avatar
    Cap Mold over 3 years later:

    With more than 20 years of experience, Intertech provides an extensive integrated operational ability from design to production of molds 100% made in Taiwan. Additional to our own mold making factory, we also cooperate with our team vendors to form a very strong working force in Taiwan.

    For the overseas market, we work very closely with local representatives in order to take care of the technical communication and after-sales service to our customers. We also participate in the EUROMOLD & FAKUMA exhibitions and meet our customers every year in Europe. By concentrating on mold “niche markets”, we play a very useful mold maker role from the Far East whenever customers want to develop their new projects. We provide services from A to Z to our customers on a very economic cost and effect basis.

Comments