(Happy new year all!)

I have thousands of lines of tests written using Midje and it was the 
second one I turned to when I started using Clojure full-time a couple of 
years ago. I think it would be fairer to say that Midje is powerful enough 
to hang yourself, but that doesn't make that power wrong. This is the good 
old power/not power dilema and caution should dfefinitely be used by 
newbies using Midje, particularly established OO developers to ensure they 
don't mis-use Midje's tools as a bridge to stay in the OO paradigm.

Having said that, I don't use midje anymore simply because of the IDE 
support. I did encounter some minor issues (like gettings facts working in 
macros for example) but that was almost certainly my issue and if I stayed 
on the "beaten track" as it were it was a delight to use and rock solid.

I gotta say Timothy, I think you are coming across a bit strong - it might 
not float your boat, but you need to back up "abomination". At the moment 
you risk people writing off your experience as "mis-used the tools, got in 
a mess and then blamed the tools" which would be a shame as your "paradigm 
shift/mental model" point is valid.

Brian - Midje rocks - keep up the good work ;).

On Saturday, 3 January 2015 15:39:08 UTC, tbc++ wrote:
>
> >> Hacker News notwithstanding, "idiosyncratic interface" is not a 
> synonym for abomination.
>
> True, however, reaching into code, and re-deffing a function's definition 
> is. Not only is it not thread-safe (removing the possibility of ever 
> running two tests in parallel), but it also hides main problem. If you need 
> to use Midje's "providing" you wrote your code wrong. If your only way to 
> test a given bit of code is to re-deff a var, then that var should be 
> abstracted into a different component. Because at the end of the day, I 
> don't care if 'foo' makes a call to 'bar', all I really care about is that 
> 'foo' saves data to 'baz'.
>
> Stuff like with-redefs and providing muck with a developer's mental model 
> of the source code. So instead of being able to say "well foo calls baz 
> here, so this should work". They have to think "well foo calls baz unless 
> someone re-deffs it, in which case I haven't a clue what's going to happen, 
> so let me go check every test that calls foo, or calls something that calls 
> foo to make sure it isn't overriding baz somehow". 
>
> >> Lots of people use Midje for production code without your problems.
>
> Not in my experience. I've used Midje in two fairly large codebases (not 
> including mine, on these I was brought in as a consultant). And not only 
> were the tests brittle (doing simple refactoring to the codebase would 
> break many tests unrelated to that code, and that weren't really bugs at 
> all), but the developers themselves mentioned more than once that they wish 
> they had gone with a simpler testing framework. 
>
> So perhaps that is the problem. Midje is "easy", but not "simple". New 
> Clojure developers pick up Midje because it has all the bells and whistles, 
> but they lack the experience to use it properly, and so they end up with 
> unmaintainable code. And so I assert that a simpler library, something that 
> only provides deftest, assert and run-tests forces developers to think 
> about the best way to test something, and to write their own macros (as 
> patterns emerge). 
>
> But hey, don't take my word for it, run a poll, see what users of Midje 
> think and would like to see. Include the factors I mentioned above (# of 
> years using Clojure, # of years using Midje, do they still use it, etc). 
>
> Timothy
>
> On Fri, Jan 2, 2015 at 6:55 PM, Brian Marick <mar...@exampler.com 
> <javascript:>> wrote:
>
>>
>>
>> Timothy Baldridge wrote:
>>
>>> I don't recommend Midje at all. Many of the framework's mocking
>>> facilities (such as providing) are abominations.
>>>
>>
>> Hacker News notwithstanding, "idiosyncratic interface" is not a synonym 
>> for abomination.
>>
>>  It may look cute,
>>> but I've lost countless hours to bugs and unexpected behavior related to
>>> Midje.
>>>
>>
>> An example would be handy right about now.
>>
>> As the author of Midje, I protest. Lots of people use Midje for 
>> production code without your problems. I've been using on production code 
>> for coming on two years now.
>>
>> C'mon: all of the main Clojure testing frameworks are opinionated, each 
>> in different ways. They're all perfectly competent at what they do. They 
>> don't hide bugs. They all have deterministic behavior. None of them are all 
>> that complicated.
>>
>>  
>>> The pattern I do recommend is to break your system up into components.
>>> Each component should be testable by mocking its dependencies and then
>>> testing only that component. In a final test, stitch together all your
>>> components and run system tests against all components at once.
>>>
>>
>> I think this is good advice.
>>
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- You received this message because you are subscribed to the Google 
>> Groups "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> “One of the main causes of the fall of the Roman Empire was that–lacking 
> zero–they had no way to indicate successful termination of their C 
> programs.”
> (Robert Firth) 
>  

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to