<blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">Tests are code, and are so difficult to write or maintain as<br>
development code.</blockquote><div><br>There are certain strategies and programming mannerisms to avoid this problem exactly, more commonly known as "testing patterns". One of them is "explicit testing" - making your test code as simple, atomic, and transparent as possible. Code line-by-line. Replace for-loops with line-by-line statements, etc, generally replace complexity with simplicity.<br>
<br>Intuitively, the test code shouldn't be as complicated as production code - which means every tactic one has developed to write compact and effective code (in production mode) has to be reversed for testing code. <br>
<br>An example: I'm still fairly new to Ruby so at first I didn't like:<br><br>    login_as(:non_admin)<br>    assert_no_difference('Gym.count') do<br>      delete :destroy, :id => gyms(:crossfit_san_diego).id<br>
    end<br><br>(The Ruby "do" still seems a bit quirky to me.) So I replaced the above, <b>to be completely transparent</b>, with this:<br>   <br>    login_as(:non_admin)<br>    gym_count_before_delete = Gym.count<br>

    delete :destroy, :id => gyms(:crossfit_san_diego).id<br>   
assert_equal gym_count_before_delete, Gym.count<br><br>Just an example, but I hope it goes a long way to show that really the power is in the developer's hands to write something that is both clean, useful, and comprehensive.<br>
</div><br>Having said this, I personally do think writing testing code alongside production code is a huge boost in overview, productivity, and confidence. It's less about restricting code than about rhythm and focus. And if it is about restricting code, all the better - I like restricting my code to something that <b>works</b>.<br>
<br>My 50 cents!<br><br>/ Vahagn<br><br><div class="gmail_quote">On Thu, Feb 19, 2009 at 11:51 AM, Francisco Trindade (Frank) <span dir="ltr"><<a href="mailto:frank.trindade@gmail.com">frank.trindade@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Tests are code, and are so difficult to write or maintain as<br>
development code. If you want to write tests (and you should, IMO),<br>
you have to be prepared to spend time writing it carefully, spend time<br>
refactoring it, spend time erasing tests that are no long necessary,<br>
etc...<br>
<br>
Not mentioning the benefits for design that were already mentioned<br>
before in this thread, I wouldn't like to get near of maintaining or<br>
modifying non-tested ruby code. Regression tests give you the<br>
confidence to change and know that everything is still working ,<br>
specially in a dynamic language, and that is impossible to do using<br>
manual testing.<br>
<br>
Just my two cents.<br>
<br>
Francisco Trindade<br>
Software Consultant<br>
ThoughtWorks UK<br>
<br>
<a href="http://franktrindade.com" target="_blank">http://franktrindade.com</a><br>
<div><div></div><div class="Wj3C7c"><br>
On Thu, Feb 19, 2009 at 10:42 AM, Chris Parsons<br>
<<a href="mailto:chris@edendevelopment.co.uk">chris@edendevelopment.co.uk</a>> wrote:<br>
> On 19 Feb 2009, at 10:22, Tom Stuart wrote:<br>
><br>
>> Without taking sides, what surprises me is how few people say anything<br>
>> about just how hard it is to write useful, robust, intelligible, non-brittle<br>
>> tests (especially for e.g. Rails applications) and how much time it takes to<br>
>> create and maintain them. Common wisdom is that this investment of time and<br>
>> effort more than pays off in quality and stability but, well, is that<br>
>> appealing idea necessarily always true? Is there really nobody in the world<br>
>> who actually wastes time writing tests?<br>
><br>
> I've wasted many hours writing tests for features for which the investment<br>
> just wasn't justified, and kicked myself for not writing tests for things<br>
> that really needed them. It's all part of the learning curve. Test where the<br>
> risk is[1], and read blogs by people like Jay Fields and Pat Maddox - they<br>
> have some very interesting discussion on testing techniques.<br>
><br>
> I think the biggest mistake people make is thinking that starting to write<br>
> tests is going to yield a huge instant payoff with no effort. There is a<br>
> small instant payoff, a lot more learning, and a real danger of<br>
> overconfidence.<br>
><br>
> We need to write about testing on our blog more. It's not easy at all, but<br>
> if you're disciplined about it does work for in your favour[2].<br>
><br>
> Oh, and there are no sides here ... this is positive open-minded debate,<br>
> right? :)<br>
><br>
> Chris<br>
><br>
> [1] Someone famous said this; no idea who.<br>
> [2] Well, not when we're doing stuff for fun which doesn't matter much<br>
> (<a href="http://ykyat.com" target="_blank">http://ykyat.com</a> :)<br>
><br>
> --<br>
> Chris Parsons<br>
> Managing Director<br>
> Eden Development (UK) Ltd<br>
><br>
> <a href="mailto:chris@edendevelopment.co.uk">chris@edendevelopment.co.uk</a><br>
> <a href="http://www.edendevelopment.co.uk" target="_blank">www.edendevelopment.co.uk</a><br>
><br>
> 0845 0097 094<br>
> po box 425, winchester, so23 0wy, uk<br>
> Map: <a href="http://pininthemap.com/edendevelopment" target="_blank">http://pininthemap.com/edendevelopment</a><br>
><br>
><br>
> Tried Pin in the Map? Mark a map location, add text, send to friends.<br>
> <a href="http://pininthemap.com" target="_blank">http://pininthemap.com</a><br>
><br>
> This electronic message and all contents contain information from the sender<br>
> which may be privileged, confidential or otherwise protected from<br>
> disclosure. The information is intended to be for the addressee(s) only. If<br>
> you are not an addressee, any copying, disclosure, distribution or use of<br>
> the contents of this message is prohibited. If you have received this<br>
> electronic message in error, please notify the sender by reply e-mail and<br>
> destroy the original message and all copies. The sender does not accept<br>
> liability for any errors or omissions.<br>
> _______________________________________________<br>
> Chat mailing list<br>
> <a href="mailto:Chat@lists.lrug.org">Chat@lists.lrug.org</a><br>
> <a href="http://lists.lrug.org/listinfo.cgi/chat-lrug.org" target="_blank">http://lists.lrug.org/listinfo.cgi/chat-lrug.org</a><br>
><br>
<br>
<br>
<br>
</div></div>--<br>
--<br>
<font color="#888888">Francisco Trindade<br>
</font><div><div></div><div class="Wj3C7c">_______________________________________________<br>
Chat mailing list<br>
<a href="mailto:Chat@lists.lrug.org">Chat@lists.lrug.org</a><br>
<a href="http://lists.lrug.org/listinfo.cgi/chat-lrug.org" target="_blank">http://lists.lrug.org/listinfo.cgi/chat-lrug.org</a><br>
</div></div></blockquote></div><br>