expected exception in tests

I have a feeling too many people get it wrong so let me stress:

@Test(expected = SomeException.class) // IS BAD FOR YOU

I do enjoy jUnit a lot, thanks guys for sharing! Yet, I don’t like @Test(expected) feature of jUnit. In my TDD classes I simply teach to avoid using it. I admit the feature can potentially make few tests cleaner. However, it tends to bring more trouble than value. Newbies too often misuse it which leads to poor quality tests. Therefore:

Rule 1: don’t use @Test(expected)

My colleague (cheers Bartek!) pursues Master at the Uni. They teach him testing. One day a lecturer was presenting some test code:

public void testSomething() {
  //line 1: throws NullPointerException
  //lines 2-30: some crappy test code

The test is useless. Due to some bug in the setup the test method breaks in line 1. Therefore most of the test code is not even executed. The expected exception does great job in hiding this issue; the test is green! Therefore:

Rule 2: If you violate Rule #1 then at least make the exception very specific. Example:

public void shouldBuyBread() {}

Even if you use specific exception then the test does not document exactly where the exception is thrown. Sometimes it may lead to subtle bugs. Therefore:

Rule 3: Don’t violate Rule #1 when the test method has multiple lines.

Instead you can simply write:

public void shouldBuyBread() throws Exception {

  try {
  } catch (BreadOutOfStockException e) {}

Above is my preferred way of documenting ‘exceptional’ behavior. There you go, it is The Ultimate Test Template for ‘exceptional’ behavior.

JUnit is getting better. New goodies for exception handling in tests arrive. @Rule ExpectedException better documents what action triggers the exception. Also, it nicely maps to //given //when //then style. The downside is that you need some extra code if you want to interrogate the exception, for example if you want assert if exception message contains a substring (api as of 07-2010). Nevertheless:

Rule 4: Favor @Rule ExpectedException over @Test(expected) when test method has multiple lines.

Rule 5: Keep an eye on new versions of your testing libraries.

If you are already at RI in TDD than consider my Rule #1 as a safety net. You’ll never know when a new junior team member joins. He may easily misuse the patterns he sees in the codebase. Javadoc for JUnit does not say how to safely use @Test(expected) (at the moment).

If you are learning testing don’t get too upset with my dogmatic rules. If only you write any tests then I am smiling already. You smile too, write tests and be happy. Soon you’ll get your RI rank in TDD.

Rule 6: Write tests & smile!

60 Responses to expected exception in tests

  1. Tomek N. says:

    I use similar pattern for testing exceptions (try/fail/catch). First thing to notice is to always remember about adding fail(“Expected SomeException”) right after the execution of “when” method. If you forget about it, the test will remain green even when the method didn’t threw the exception.

    Also I am not certain about the place you put “then” comment. This section is meant to have assertions and, more generally, some testing logic. So, IMHO, “then” should be placed in catch block body. And then this catch body might even have assertions on exception message or other error codes – to narrow the possibility of “false positive” test even more.

  2. szczepiq says:

    I like the idea of ‘then’ in the catch block! But wouldn’t it look weird if catch block is empty (like in my example)?

    Good point that fail() is a must.

  3. I write “then” comment above catch block. My rationale is that “when” I invoke the tested method “then” I expect the exception to be caught, not the test failure.

    As for missing fail() I’ve seen so many tests that got it wrong! For me it’s another reason to do test-first because if you write the test before the implementation you immediately spot such mistake.

  4. […] Szczepan post about expected (exception) in ours […]

  5. Tomek says:

    Hello Szczepan,

    I never had any problems with misuse of expected exceptions (and I have done enough of code reviews) so I’m little surprised that you consider it to be a serious problem worth blogging about.

    Anyway, I think I don’t agree. :) If my method throws sensible exceptions then they are a part of its API (yes, they are) and should be tested. Thus expected exceptions is one of many tools in my testing toolbox.

    BTW. Why do you use jUnit and not TestNG? Yeah, I know – curiosity killed the cat – but it still surprises me that people stick to old, good jUnit.

    Tomek Kaczanowski

  6. szczepiq says:

    I wrote this article after someone (again) posted a code snippet to the mockito mailing list with glaring misuse of @Test(expected). I found myself teaching the same thing over and over again so I blogged about it. Trust me, I’m lazy. I wouldn’t write anything if there wasn’t an incentive for me – now I can simply pass on the link!

    I’m not sure what you disagree with… I don’t say you should not test exceptions. I try to give generic guidelines on how to test exceptions *successfully* =)

    Why don’t I use TestNG? I find jUnit slightly better integrated with tools I use and there’s very little extra in TestNG api that I need. Both tools are ok =)

  7. Tomek says:

    Szczepan, read the beginning of your post again – you say there that “(expected = SomeException.class) // IS BAD FOR YOU” (notice the CAPITAL LETTERS) and that you “don’t like @Test(expected) feature of jUnit.”

    This is in contradiction to what you say now:
    “I don’t say you should not test exception”.

    So is it bad or not? Is it bad or is it a useful feature which can be misused? Should you test your exception or you shouldn’t because this “is bad for you”?

    Sounds schizophrenic to me. ;)

    Tomek Kaczanowski

  8. szczepiq says:

    There are number of ways of testing exceptions and this post tries to rank them. I don’t see a contradiction but if you see it… I guess I will have to live with this somehow =)

    I’m dogmatic, every coach is. I don’t like features that on average day lead to poor code. I’m sure you are RI enough to see the big picture 8-)

  9. Erik says:

    Ok, so I have to comment on this. Your proposed “solution” doesn’t alleviate the problem at all. You’re still dependent on the original developer knowing how to write a good test. You properly catch BreadOutOfStockException in Rule 3, but had the developer caught Exception instead you’d be right back to square one. In short, Rule 3 is just Rule 2 but with more bloat.

  10. Roger Norling says:

    Hi Szczepan

    I found your blog through the Mockito homepage.

    Have you seen Antony Marcano’s way of verifying thrown exceptions (http://antonymarcano.com/blog/2010/07/old-favourite-expected-exceptions/)? I find it realy good because it follows the given/when/then pattern so nicely.

    In essence, this is his pattern (slightly edited by me):
    public void shouldVerifyAThrownExampleException() throws Exception {
    // given
    // ...
    Exception thrown = null;

    try {
    // when
    // ...
    } catch (Exception caught) {
    thrown = caught;

    // then
    assertThat(thrown, is(instanceOf(ExampleException.class)));

    Perhaps a bit more lengthy, but that’s easily fixed by a code template.

  11. Rod Woo says:

    Hi Szczepan,

    as you I felt quite uncomfortable with JUnit’s approach of testing expected exceptions. So I used Mockito to implement a little helper that addresses the issues: http://code.google.com/p/catch-exception/

    I would like to here your opinion about that.


  12. szczepiq says:

    I like your library :) It’s a bit too late for me to use it since I’m mostly with groovy these days doing a lot of spock testing.

    The api looks good, the name of the library is good. Still, there’re always of ways you can play with the API so you should have a lot fun with it :), for example:





    //sort of consistent with Mockito api:

    Also regarding the API, you might want to lean towards consistency with other frameworks, e.g. fest assert – build the api starting with assertThat, or mockito – make sure the method names don’t clash and do not overlap, etc. This way your framework will be nicely pluggable to existing testing toolkits many devs use.

    Hope that helps and good luck!

  13. Anonymous says:

    This style is steller! You definitely know how to maintain a reader entertained. Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Amazing job. I genuinely enjoyed what you had to say, and far more than that, how you presented it. Too cool!

  14. rod says:

    Hi Szczepan, I liked your ideas and I made them part of the latest version of catch-exception. Thank you for your suggestions :-)


  15. hier says:

    I do not even know how I ended up right here,
    but I believed this publish was good. I don’t realize who you’re however certainly you are going to a well-known blogger if you aren’t already. Cheers!

  16. frightanic says:

    catch (BreadOutOfStockException e) {} will bite you in the ass if you use static code analysis tools because they don’t like empty catch-blocks.

  17. Fruzenshtein says:

    The nice advice, I mean rule #1

  18. okleina says:

    I blog often and I really thank you for your content.
    This article has truly peaked my interest. I’m going to book mark your blog and keep checking for new information about once per week.
    I opted in for your RSS feed too.

  19. I have been surfing online more than three hours today, yet I never found anny interesting article
    like yours. It is pretty worth enough for me. Personally,
    if all website owners and bloggers made good content as you did, the net will be a lot more useful than ever before.|
    I could not refraiun from commenting. Perfectly written!|
    I will immediately clutch youur rss ass I can not find your email subscription link or newsletter service.
    Do you have any? Kindly allow me understand in order that I could subscribe.
    It’s perfect time to make some plans for the future and it’s time to
    be happy. I’ve read this post and if I could I want to suggest you
    some interesting things or tips. Perhaps you could write next articles referring to this article.
    I wish to read more things about it!|
    It is appropriate time to make a few plans for the long run and it’s time to be happy.

    I’ve read this put up and if I may just I want to recommend you some attention-grabbing issues or tips.

    Maybe you could write next articles relating to this article.
    I desire to learn even more issues approximately it!|
    I have been browsing online more than three hours today, but I never discovered any fascinating article like yours.
    It is beautiful worth sufficient for me. In my opinion, if all site owners and bloggers made good
    content material as you did, the web can be a lot more helpful than ever before.|
    Ahaa, its good discussion concerning this paragraph here at
    this web site, I have read all that, so at this time
    me also commenting at this place.|
    I am sure this post has touched all the internet users, its
    really really pleasant piece of writing on building up new
    Wow, this post is nice, my sister is analyzing these kinds of
    things, therefore I am going to tell her.|
    bookmarked!!, I like your blog!|
    Way cool! Some extremely valid points! I appreciate you writing this write-up plus the rest of
    the website is very good.|
    Hi, I do think this is a great web site. I stumbledupon it ;
    ) I am going to revisit yet again since i have book marked
    it. Money and freedom is the greatest way to change,
    may you be rich and continue to help other people.|
    Woah! I’m really digging the template/theme of this site.
    It’s simple, yet effective. A lot of times it’s hard to get that “perfect balance” between user friendliness
    and visual appearance. I must say you’ve done a excellent job with this.
    Additionally, the blog loads extremely fast for me on Chrome.
    Exceptional Blog!|
    These are actually fantastic ideas in about blogging. You have touched some pleasant things
    here. Any way keep up wrinting.|
    Everyone loves what you guys are usually up too.
    This kind of clever work and exposure! Keep up the very good works guys I’ve included youu guys to blogroll.|
    Hey! Someone in my Facebook group shared this website with us so
    I came to check it out. I’m definitely loving the
    information. I’m bookmarking and will be tweeting this to my followers!
    Terrific blog and excellent design.|
    Everyone loves what you guys tend to be uup too. Such clever work and coverage!
    Keep up the fantastic works guys I’ve incorporated you guys to
    my own blogroll.|
    Hey there would you mind stating which blog platform you’re using?

    I’m looking to start my own blog soon but I’m havkng a haed time choosing betweenn BlogEngine/Wordpress/B2evolution and Drupal.

    The reason I ask is because your layout seems different tyen mkst blogs and I’m looking for something completely unique.
    P.S Sorry for getting off-topic but I had to ask!|
    Hi would you mind letting me know which webhost you’re utilizing?
    I’ve loaded your blog in 3 different browsers
    and I must say this blog loads a lot faster then most.
    Can you recommend a good web hosting provider at a fair price?
    Thank you, I appreciate it!|
    I love it whenever people get together and share views.
    Great site, continue the good work!|
    Thank you for the good writeup. It in fact was
    a amusement account it. Look advanced to far added agreeable from you!

    By the way, how can we communicate?|
    Hey there just wanted to give you a quick heads up.
    The words in your article seem to be running off the screen in Internet explorer.
    I’m not sure if this is a format issue or something to do with browser compatibility but Ifigured I’d
    post to let you know. The design and style look
    great though! Hope you get the problem solved soon.
    This is a topic which is near to my heart…
    Thank you! Exactly where are your contact details though?|
    It’s very easy to find ouut any matter on net as compared to books,
    as I found this post at this web page.|
    Does your website have a contact page? I’m having a tough
    time locating it but, I’d like to syoot you an email.
    I’ve got some suggestions for your blog you might be interested in hearing.
    Either way, great website and I look forward to seeing it expand over time.|
    Hey there! I’ve been reading your website for a while now and finally
    got the bravery to go ahead and give you a shout out from Houston Texas!

    Just wanted to mention keep up the excellent job!|
    Greetings from Carolina! I’m bored to death at work so I decided to browse your website on my
    iphone during lunch break. I really like the information you present here
    and can’t wait to take a look when I get home. I’m surprised at how quick your blog loaded on
    my phone .. I’m noot even using WIFI, just 3G .. Anyhow, good blog!|
    Its like you learn my mind! You seem too know a lot about this,
    such as yoou wrote the e bolk in it oor something.
    I think that you simply can do with some percent to force the message house a little bit,
    however instead of that, this is fantastic blog. An exxcellent read.

    I’ll definitely be back.|
    I visited several web sites however the audio quality for audio songs current at this web site is really superb.|
    Howdy, i read your blog from time to time and i own a similar one and i was just wondering if you
    get a lot of spam remarks? If so how do you prevent it,
    any plugin or anything you can advise? I get so much lately it’s drriving me crazy so any support is very much appreciated.|
    Greetings! Very helpful advice in this particular article!
    It is thee little changes that produce the biggest changes.

    Thanks for sharing!|
    I seriously love your blog.. Pleasant colors
    & theme. Did you build this site yourself?

    Pleaase reply back as I’m trying to create my own personal website
    and would like to learn where you got this from or just
    what the theme is named. Thanks!|
    Hello there! This blog post could not be written any better!
    Looking through this article reminds me of my
    previous roommate! He constantly kept preaching about this.
    I most certainly will send this article to him.
    Pretty sure he’s going to have a great read. Many thanks ffor sharing!|
    Amazing! Thiis blog looks exactly like my old one! It’s on
    a entirely different subject but it has pretty much the same
    page layout and design. Outstanding choice of colors!|
    There is definately a great deal to find out about this subject.
    I really like all of the points you made.|
    You made some really good points there. I looked on the
    web for more information about the issue and found most individuals will
    go along with your views on this web site.|
    Hello, I read your blog regularly. Your story-telling style is witty, keep up the
    good work!|
    I just couldn’t go away your web site before suggesting that I actually enjoyed the standard info a person provide for your visitors?
    Is gonna be back frequently to check up on new posts|
    I need to to thank you forr this excellent read!!
    I definitely lovfed every bit of it. I’ve got you bookmarked to check out new things
    you post…|
    Hello, just wanted to mention, I liked this post.
    It was funny. Keep on posting!|
    I comment each time I especially enjoy a article on a site or I
    have something to contribute to the conversation.
    Usually it is caused by the passion communicated in the post I looked at.
    And after this article expected exception in tests | monkey island.
    I was excited enough to drop a thought ;) I do
    have a couple of questions for you if it’s allright. Is it just me orr does
    itlook like like some oof these remarks look as if they are written by brain dead visitors?
    :-P And, if you are posting at other sites, I’d like to keep up with anything new you have to post.
    Could you list all of your communal sites like your Facebook page, twitter feed,
    or linkedin profile?|
    Hello, I enjoy reading through your article. I wanted to
    write a little comment to support you.|
    I constantly spent my half an hour to read this website’s content eevery day along
    with a cup of coffee.|
    I all the time emailed this website post page to all my contacts, as if like too read it afterward
    my friends will too.|
    My developer is trying to convince me to move too .net from PHP.
    I have always disliked the idea because off the expenses.
    But he’s tryiong none the less. I’ve been using Movable-type
    on a number of websites for about a year and am worried about switching to another platform.
    I have heard very good things about blogengine.net.
    Is there a way I can transfer all my wordpress content into it?
    Any help would be really appreciated!|
    Hello there! I could have sworn I’ve been to your blog before but after going through some of
    the posts I realized it’s new to me. Nonetheless, I’m certainly pleased I came across it and I’ll be book-marking it and checking back regularly!|
    Great article! Thhis is the type of information that are supposed to be shared around the net.
    Shame on Google for not positioning thiss put up higher!
    Come oon oer andd seek advice from my site . Thanks =)|
    Heya i’m for the first time here. I came across this board and
    I find It truly useful & it helped me out a lot.
    I hope to give something back and aid others like you helped me.|
    Howdy, I do think your site could be having internet browser
    compatibility problems. When I look at your blog in Safari, it looks fine however when
    opening in I.E., it has some overlapping issues. I simply wanted to provide you with a quick heads up!
    Besides that, wonderful website!|
    Somebody necessarily lend a hand to make significantly posts I might state.
    This is the first time I frequented your website page and
    so far? I amazed with the analysis you made to make this actual post extraordinary.
    Great process!|
    Heya i am for the primary time here. I came across this board and I in finding It really useful
    & it helped me out much. I’m hoping tto present one thing
    again and aid others such as you helped me.|
    Hi! I simply wish to give you a big thumbs
    up for your great info you have got right here on this post.
    I’ll be coming back to your web site for more soon.|
    I all the time used to study paragraph in news papers
    but now as I am a user of web thus from now I am using net for posts, thanks to
    Your method of describing the whole thing in this article is
    genuinely nice, all be capable of simply be aware
    of it, Thanks a lot.|
    Hi there, I discovered your site via Google at the same time as looking for a related subject, your site got
    here up, it seems good. I’ve bookmarked it in my google bookmarks.

    Hi there, simply was aware of your weblog through Google, and found that it’s truly informative.
    I’m gonna watch oout for brussels. I will appreciate in the event you proceed this in future.
    Many other folks will be benefited from your writing.

    I am curious to find out what blog systedm you happen too be using?
    I’m experiencing some minor security problems
    with my latest blog and I would like to find something more safe.
    Do you have any recommendations?|
    I am extremely impressed with your writing skills as well as with the layout on
    your weblog. Is this a paid theme or did you modify
    it yourself? Either way keep up the nice quality writing, it is
    rare to see a great blog like this one today.|
    I am extremely inspired along with your writing skills and also with the structure to your weblog.
    Is this a paid topic or did you modify it yourself?
    Anyway keep up the excellent high quality writing, it’s raare to
    peer a nice weblog like this one nowadays..|
    Hello, Neat post. There is a problem with your web site in web explorer, might test this?
    IE nonetheless is the market leader and a good component of other people will
    pass over your magnificent writing due to this problem.|
    I am not sure where you’re getting your information, but good topic.
    I needs to spend some time learning more or understanding more.
    Thanks for magnificent information I was looking for this info for my
    Hi, i think that i saw you visited my weblog thus i came to “return the favor”.I am trying to find things to improve my website!I suppose its
    ok to use some of your ideas!!

  20. Jaki rodzaj kamery użyłeś? To z pewnością jest wysokiej jakości sprzęt.

  21. pendrive says:

    What’s up to every one, as I am in fact eager of reading this web site’s
    post to be updated daily. It includes good stuff.

  22. Whats up are using WordPress for your blog platform? I’m new to the blog
    world but I’m trying to get started and create my
    own. Do you need any coding expertise to make your own blog?
    Any help would be greatly appreciated!

  23. Anonymous says:

    Smithfield Train station is incorporated in the cardiovascular system connected with cultural Smithfield Virginia, which is if possible positioned right on the actual Questionnable Stream. This specific 46 place beach house presents high-class lodgings, the full bistro, marina, and also a holiday outdoor swimming. Using a unique selection of place sorts ranging from large high-class areas by using confidential balconies inside make, thus to their split Boardwalk Areas and Cottages, so that you can even the substitute for stay in the actual Light house.
    miumiu ؔ http://www.listopadweb.com/kilimanjaroihop-miumiu14.html

  24. Hello! I’ve been reading your site for a while now and finally got the bravery to go ahead and give you a shout out from Humble
    Texas! Just wanted to say keep up the great job!

  25. Jaime says:

    Hi, I do think this is a great site. I stumbledupon it ;) I may revisit once again since I saved as a favorite
    it. Money and freedom is the greatest way to change,
    may you be rich and continue to help other people.

  26. Catharine says:

    “expected exception in tests | monkey island” was indeed a terrific
    post and I personally was extremely satisfied to come across the blog post.
    Many thanks,Katherine

  27. sprawdzian says:

    you are actually a excellent webmaster. The website loading pace is amazing.

    It seems that you are doing any unique trick. Furthermore, The
    contents are masterwork. you have performed a great activity on this subject!

  28. Nice answer back in return of this query with firm arguments
    and explaining everything concerning that.

  29. No matter if some one searches for his necessary thing, so he/she desires to be available that in
    detail, thus that thing is maintained over here.

  30. mobile games says:

    Definitely imagine that which you said. Your favorite reason appeared to be at the net the simplest thing
    to bear in mind of. I say to you, I definitely get annoyed
    even as other folks consider concerns that they plainly don’t recognise about.
    You controlled to hit the nail upon the top as smartly
    as outlined out the whole thing with no need side-effects , other folks could take a
    signal. Will likely be again to get more.
    Thank you

  31. If you are going for best contents like myself, just visit this web page daily for the
    reason that it offers quality contents, thanks

  32. Inbo50 says:

    Understanding both advantages and disadvantages are important in order to choose the best internet marketing strategy.
    A VPN creates an encrypted connection to a third-party
    server, and all your Internet traffic is routed through that server.
    Daily, even hourly, businesses can see how many individuals clicked
    on their ads and the traffic that is being driven to their website.

  33. パジャマ 冬

    expected exception in tests | monkey island

  34. インデックス

    expected exception in tests | monkey island

  35. Parkereso.Net

    expected exception in tests | monkey island

  36. ランキング

    expected exception in tests | monkey island

  37. 経由 says:


    expected exception in tests | monkey island

  38. フローラカラコン

    expected exception in tests | monkey island

  39. お宮参り用授乳服

    expected exception in tests | monkey island

  40. However, this scene changed when more programmers became aware of virus programming and started building viruses that manipulated
    and destroyed data on infected computers. Advertisers all over the place, advertising everything underneath the sun.
    It’s probably some mix of the two, so I have to give him props for not going too far in either direction.

  41. Understanding both advantages and disadvantages are important in order to choose the best internet marketing strategy.
    Advertisers all over the place, advertising everything
    underneath the sun. By ranking your website on the very first page of
    search engine results, you are tapping into a huge number of people
    looking for what exactly you offer.

  42. Along with plenty of TV channels, there certainly are a wide array of online news websites which include these latest news stories.
    Launched in 2005, TMZ quickly gained traction as a celebrity website.

  43. I am supplying free samples of world-class Belgium chocolates.
    To become eligible, quickly answer our comment along with your address and we will ship it out within the next day.

  44. QueenSaz.com says:

    The web has truly changed the way we communicate and made it
    far easier to stay informed about the lives of our loved ones.
    Today, lots of websites and blogs bring in unheard of income for their owners merely by promoting another’s company on their web pages.
    Efficiency: Many carriers provide multiple receive emails, so your fax messages are automatically delivered to whomever you intend.

  45. nanofilosofia.ru

    expected exception in tests | monkey island

  46. This will get you traffic to your site and make money.
    As the culture of internet slang grew, it took on new origins from pop culture or
    video games and television. Daily, even hourly,
    businesses can see how many individuals clicked on their ads and the traffic that is being driven to their website.

  47. is s-video better than rca

  48. obviously says:


    expected exception in tests | monkey island

  49. That is really fascinating, You are an overly skilled blogger.
    I’ve joined your feed and sit up for in search
    of more of your fantastic post. Additionally, I
    have shared your web site in my social networks

  50. internet says:


    expected exception in tests | monkey island

  51. Nader fajny post, badawcze zapisy zalecam wszystkim literaturę

  52. Nice blog here! Also your site loads up very fast! What host are you using?
    Can I get your affiliate link to your host? I wish my website loaded up as quickly as yours lol

  53. Hello! I just wanted to ask if you ever have any
    issues with hackers? My last blog (wordpress) was hacked and I ended up
    losing several weeks of hard work due to no back up. Do you have
    any methods to prevent hackers?

  54. What’s up, yeah this paragraph is really pleasant and I have learned lot of things from it on the topic of blogging.

  55. fxsolutions.zendesk.com

    expected exception in tests | monkey island

  56. mine says:


    expected exception in tests | monkey island

  57. euromillions says:

    Badawcze spojrzenie na rzecz, każdy powinien rozczytać oraz zaznajomić się z przedmiotem.

  58. source says:

    Walton’s Fancy and Staple, Sandra Bullock’s Second Restaurant – In 2009,
    Bullock opened Walton’s Fancy and Staple at 609 W. If you’re around the flip side with the breakup coin,
    however, you understand the above paragraph all too well,
    don’t you. You may not recognize it but Network marketing is one
    with the leading profitable businesses in the world today.

  59. I’m truly enjoying the design and layout of your site.
    It’s a very easy on the eyes which makes it much more enjoyable for me to come here and
    visit more often. Did you hire out a designer to
    create your theme? Great work!

  60. google says:

    I just like the helpful info you provide on your
    articles. I’ll bookmark your weblog and check once more right here
    frequently. I’m reasonably sure I will learn many new stuff
    right right here! Good luck for the following!

%d bloggers like this: