<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments for BestFriendChris</title>
	<link>http://bestfriendchris.com/blog</link>
	<description></description>
	<pubDate>Wed, 10 Mar 2010 21:04:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0</generator>

	<item>
		<title>Comment on Builds suck by Steve Loughran</title>
		<link>http://bestfriendchris.com/blog/2007/06/13/builds-suck/#comment-937</link>
		<pubDate>Mon, 12 Nov 2007 16:50:41 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/06/13/builds-suck/#comment-937</guid>
					<description>Ant has AntUnit [http://ant.apache.org/antlibs/antunit/]; a library to make assertions about the state of the world after tasks run. Its primarily there to check that tasks behave as expected, but, apart from the assertions you can make of the log, all its tests are there to use in the build itself.

Someone has tried to do a virtual filesystem for ant, but the problem is the third party tools interfere. How can you predict what a WSDL2java compiler is going to produce, except by parsing the WSDL and knowing its XSD to java mappings?

Deployment is a separate problem; it is what I work on in the SmartFrog project. What we have there is a notion of preflight, where you do every check prior to actually deploying, and make sure that everything is good to go. Where preflight fails is in integrating run-time values. How do I know what IP address the socket will be given, except by opening it? That's a value I pass on to the component that checks for the web page, so ensuring we bump into any firewall set up on the localhost. There's no complete substitute for a live deployment. 

-steve</description>
		<content:encoded><![CDATA[<p>Ant has AntUnit [http://ant.apache.org/antlibs/antunit/]; a library to make assertions about the state of the world after tasks run. Its primarily there to check that tasks behave as expected, but, apart from the assertions you can make of the log, all its tests are there to use in the build itself.</p>
<p>Someone has tried to do a virtual filesystem for ant, but the problem is the third party tools interfere. How can you predict what a WSDL2java compiler is going to produce, except by parsing the WSDL and knowing its XSD to java mappings?</p>
<p>Deployment is a separate problem; it is what I work on in the SmartFrog project. What we have there is a notion of preflight, where you do every check prior to actually deploying, and make sure that everything is good to go. Where preflight fails is in integrating run-time values. How do I know what IP address the socket will be given, except by opening it? That&#8217;s a value I pass on to the component that checks for the web page, so ensuring we bump into any firewall set up on the localhost. There&#8217;s no complete substitute for a live deployment. </p>
<p>-steve
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on ErUnit - Unit Testing for Erlang by Ben Poweski</title>
		<link>http://bestfriendchris.com/blog/2007/04/23/erunit-unit-testing-for-erlang/#comment-716</link>
		<pubDate>Thu, 12 Jul 2007 18:34:33 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/04/23/erunit-unit-testing-for-erlang/#comment-716</guid>
					<description>Nice, I like your xUnit framework better than eunit.  If feels more natural given my Ruby background.

Keep it up!</description>
		<content:encoded><![CDATA[<p>Nice, I like your xUnit framework better than eunit.  If feels more natural given my Ruby background.</p>
<p>Keep it up!
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Builds suck by Brett Porter</title>
		<link>http://bestfriendchris.com/blog/2007/06/13/builds-suck/#comment-688</link>
		<pubDate>Thu, 14 Jun 2007 23:38:54 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/06/13/builds-suck/#comment-688</guid>
					<description>Nice post.

These express a lot of the reasons that Apache Maven (particularly maven 2) came into being:
- modules and submodules are a key concept of a maven build, as is dependency management.
- a standard build lifecycle is applied to all projects so that 'package' means the same thing everywhere, as does 'install' or 'compile' or 'test'.
- reusable build infrastructure through plugins (that should be coded, tested, documented and shared/consumed like your other code)

I like the concept of being able to functional test a build - I believe the role here is to be able to easily verify that the output of the build matches a set of expected criteria (files produced, contents of the files, other changes made, etc).

I wouldn't delve into unit testing a build myself, though being able to 'dry run' and do the above validations rather than perform a build and then discover it didn't meet the criteria at the end would be an interesting thing to do.</description>
		<content:encoded><![CDATA[<p>Nice post.</p>
<p>These express a lot of the reasons that Apache Maven (particularly maven 2) came into being:<br />
- modules and submodules are a key concept of a maven build, as is dependency management.<br />
- a standard build lifecycle is applied to all projects so that &#8216;package&#8217; means the same thing everywhere, as does &#8216;install&#8217; or &#8216;compile&#8217; or &#8216;test&#8217;.<br />
- reusable build infrastructure through plugins (that should be coded, tested, documented and shared/consumed like your other code)</p>
<p>I like the concept of being able to functional test a build - I believe the role here is to be able to easily verify that the output of the build matches a set of expected criteria (files produced, contents of the files, other changes made, etc).</p>
<p>I wouldn&#8217;t delve into unit testing a build myself, though being able to &#8216;dry run&#8217; and do the above validations rather than perform a build and then discover it didn&#8217;t meet the criteria at the end would be an interesting thing to do.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on Builds suck by Nilanjan</title>
		<link>http://bestfriendchris.com/blog/2007/06/13/builds-suck/#comment-686</link>
		<pubDate>Thu, 14 Jun 2007 01:43:00 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/06/13/builds-suck/#comment-686</guid>
					<description>Dude, 

Thinking about it further, I believe that people don't consider build as part of their deliverables and they feel why they should spend time on it......

What makes it more important is your build files goes through changes like normal code does but in case of build it could be reducing the build cycle, adding new sub projects, changes dependencies etc. And most of the time people 
when people do change the build it breaks some other part of the build system which could days to figure out.  

Now that we have seen so many builds that sucks, we should totally come up with list &quot;build smells&quot; and a unit testing tool which will help them to refactor their builds.</description>
		<content:encoded><![CDATA[<p>Dude, </p>
<p>Thinking about it further, I believe that people don&#8217;t consider build as part of their deliverables and they feel why they should spend time on it&#8230;&#8230;</p>
<p>What makes it more important is your build files goes through changes like normal code does but in case of build it could be reducing the build cycle, adding new sub projects, changes dependencies etc. And most of the time people<br />
when people do change the build it breaks some other part of the build system which could days to figure out.  </p>
<p>Now that we have seen so many builds that sucks, we should totally come up with list &#8220;build smells&#8221; and a unit testing tool which will help them to refactor their builds.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on EUnit vs ErUnit by Think in Read &#187; links for 2007-05-24</title>
		<link>http://bestfriendchris.com/blog/2007/05/11/eunit-vs-erunit/#comment-684</link>
		<pubDate>Thu, 24 May 2007 01:23:27 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/05/11/eunit-vs-erunit/#comment-684</guid>
					<description>[...] EUnit vs ErUnit @ BestFriendChris (tags: erlang)    归类于： daily del.licio.us &amp;#8212; rainhanket @ 9:23 am [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] EUnit vs ErUnit @ BestFriendChris (tags: erlang)    归类于： daily del.licio.us &#8212; rainhanket @ 9:23 am [&#8230;]
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on EUnit vs ErUnit by BestFriendChris</title>
		<link>http://bestfriendchris.com/blog/2007/05/11/eunit-vs-erunit/#comment-683</link>
		<pubDate>Wed, 23 May 2007 21:29:54 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/05/11/eunit-vs-erunit/#comment-683</guid>
					<description>&lt;i&gt; Richard Carlsson said,&lt;/i&gt;
&lt;blockquote&gt;- Tutorial: Well, at least the documentation has been much improved lately - see http://svn.process-one.net/contribs/trunk/eunit/doc/index.html
&lt;/blockquote&gt;

Thanks. That actually helps quite a bit. :-)

&lt;blockquote&gt;- Tests in separate modules: Lately, I’ve added an implicit check for the existence of a module ‘m_tests’ if you tell EUnit to test module ‘m’. If found, all the tests in that module will be run as well. (Note, though, that tests placed in a separate module can’t test functions that are not exported, so you’ll always need the ability to have tests in the same module as the code.)
&lt;/blockquote&gt;

Great minds think alike, I guess. The only thing I'd like to add is I personally believe in white box testing. If your module has so much going on that you need to test a bunch of private functions, I take that as a tip that I need to refactor my design. That being said, I mostly program in Object Oriented languages, so I don't have much experience bringing that to a functional point of view. Until I see something that changes that, though, I'm sticking with it. I do like that EUnit now supports what I'm saying, at least.

&lt;blockquote&gt;- Pattern matching tests: There are several good macros that can/should be used in preference to plain ‘P = Test’ pattern matching: both boolean asserts, the assertMatch macro, and assertions for checking exceptions. All of these give you much better error messages. (I’m not sure what you mean when you write “don’t like using macros specifically for assertions as it makes the failures hard to debug”, since the macros are there specifically to make good error reporting possible. Another thing with the EUnit macros is that they keep working even if the EUnit library modules are not available.)
&lt;/blockquote&gt;

To be honest, that was probably a crap statement to make. I wasn't even commenting about EUnit, actually. What I SHOULD have said was when trying to use macros to test that my assertions failed correctly, I found THOSE macros hard to debug. I actually like the error messages EUnit provides. Method name and line number. Hard to go wrong, really.

&lt;blockquote&gt;Good luck with your hacking. You’re very welcome with more input on how EUnit could be improved.
&lt;/blockquote&gt;

Thanks. Now that I know where the manual is, I'll take a second look.</description>
		<content:encoded><![CDATA[<p><i> Richard Carlsson said,</i></p>
<blockquote><p>- Tutorial: Well, at least the documentation has been much improved lately - see <a href='http://svn.process-one.net/contribs/trunk/eunit/doc/index.html' rel='nofollow'>http://svn.process-one.net/contribs/trunk/eunit/doc/index.html</a>
</p></blockquote>
<p>Thanks. That actually helps quite a bit. <img src='http://bestfriendchris.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<blockquote><p>- Tests in separate modules: Lately, I’ve added an implicit check for the existence of a module ‘m_tests’ if you tell EUnit to test module ‘m’. If found, all the tests in that module will be run as well. (Note, though, that tests placed in a separate module can’t test functions that are not exported, so you’ll always need the ability to have tests in the same module as the code.)
</p></blockquote>
<p>Great minds think alike, I guess. The only thing I&#8217;d like to add is I personally believe in white box testing. If your module has so much going on that you need to test a bunch of private functions, I take that as a tip that I need to refactor my design. That being said, I mostly program in Object Oriented languages, so I don&#8217;t have much experience bringing that to a functional point of view. Until I see something that changes that, though, I&#8217;m sticking with it. I do like that EUnit now supports what I&#8217;m saying, at least.</p>
<blockquote><p>- Pattern matching tests: There are several good macros that can/should be used in preference to plain ‘P = Test’ pattern matching: both boolean asserts, the assertMatch macro, and assertions for checking exceptions. All of these give you much better error messages. (I’m not sure what you mean when you write “don’t like using macros specifically for assertions as it makes the failures hard to debug”, since the macros are there specifically to make good error reporting possible. Another thing with the EUnit macros is that they keep working even if the EUnit library modules are not available.)
</p></blockquote>
<p>To be honest, that was probably a crap statement to make. I wasn&#8217;t even commenting about EUnit, actually. What I SHOULD have said was when trying to use macros to test that my assertions failed correctly, I found THOSE macros hard to debug. I actually like the error messages EUnit provides. Method name and line number. Hard to go wrong, really.</p>
<blockquote><p>Good luck with your hacking. You’re very welcome with more input on how EUnit could be improved.
</p></blockquote>
<p>Thanks. Now that I know where the manual is, I&#8217;ll take a second look.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on EUnit vs ErUnit by Richard Carlsson</title>
		<link>http://bestfriendchris.com/blog/2007/05/11/eunit-vs-erunit/#comment-682</link>
		<pubDate>Wed, 23 May 2007 15:43:42 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/05/11/eunit-vs-erunit/#comment-682</guid>
					<description>Hi! I thought I'd address a couple of the points you were not happy about with EUnit:

- Tutorial: Well, at least the documentation has been much improved lately - see http://svn.process-one.net/contribs/trunk/eunit/doc/index.html

- Tests in separate modules: Lately, I've added an implicit check for the existence of a module 'm_tests' if you tell EUnit to test module 'm'. If found, all the tests in that module will be run as well. (Note, though, that tests placed in a separate module can't test functions that are not exported, so you'll always need the ability to have tests in the same module as the code.)

- Pattern matching tests: There are several good macros that can/should be used in preference to plain 'P = Test' pattern matching: both boolean asserts, the assertMatch macro, and assertions for checking exceptions. All of these give you much better error messages. (I'm not sure what you mean when you write &quot;don’t like using macros specifically for assertions as it makes the failures hard to debug&quot;, since the macros are there specifically to make good error reporting possible. Another thing with the EUnit macros is that they keep working even if the EUnit library modules are not available.)

Anyway, I don't want to discourage you from what you do. Your idea of using a behaviour declaration was interesting, and might be something that I'll add to EUnit; if nothing else, it can work as a marker that shows that the module was compiled with unit testing enabled.

Good luck with your hacking. You're very welcome with more input on how EUnit could be improved.

    /Richard</description>
		<content:encoded><![CDATA[<p>Hi! I thought I&#8217;d address a couple of the points you were not happy about with EUnit:</p>
<p>- Tutorial: Well, at least the documentation has been much improved lately - see <a href='http://svn.process-one.net/contribs/trunk/eunit/doc/index.html' rel='nofollow'>http://svn.process-one.net/contribs/trunk/eunit/doc/index.html</a></p>
<p>- Tests in separate modules: Lately, I&#8217;ve added an implicit check for the existence of a module &#8216;m_tests&#8217; if you tell EUnit to test module &#8216;m&#8217;. If found, all the tests in that module will be run as well. (Note, though, that tests placed in a separate module can&#8217;t test functions that are not exported, so you&#8217;ll always need the ability to have tests in the same module as the code.)</p>
<p>- Pattern matching tests: There are several good macros that can/should be used in preference to plain &#8216;P = Test&#8217; pattern matching: both boolean asserts, the assertMatch macro, and assertions for checking exceptions. All of these give you much better error messages. (I&#8217;m not sure what you mean when you write &#8220;don’t like using macros specifically for assertions as it makes the failures hard to debug&#8221;, since the macros are there specifically to make good error reporting possible. Another thing with the EUnit macros is that they keep working even if the EUnit library modules are not available.)</p>
<p>Anyway, I don&#8217;t want to discourage you from what you do. Your idea of using a behaviour declaration was interesting, and might be something that I&#8217;ll add to EUnit; if nothing else, it can work as a marker that shows that the module was compiled with unit testing enabled.</p>
<p>Good luck with your hacking. You&#8217;re very welcome with more input on how EUnit could be improved.</p>
<p>    /Richard
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on EUnit vs ErUnit by anon</title>
		<link>http://bestfriendchris.com/blog/2007/05/11/eunit-vs-erunit/#comment-681</link>
		<pubDate>Wed, 23 May 2007 11:01:53 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/05/11/eunit-vs-erunit/#comment-681</guid>
					<description>seen this? :)  http://mirroronthenet.org/blog/2007/04/erlunit-unit-testing-framework-for.html</description>
		<content:encoded><![CDATA[<p>seen this? <img src='http://bestfriendchris.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   <a href='http://mirroronthenet.org/blog/2007/04/erlunit-unit-testing-framework-for.html' rel='nofollow'>http://mirroronthenet.org/blog/2007/04/erlunit-unit-testing-framework-for.html</a>
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on ErUnit - Unit Testing for Erlang by BestFriendChris</title>
		<link>http://bestfriendchris.com/blog/2007/04/23/erunit-unit-testing-for-erlang/#comment-679</link>
		<pubDate>Fri, 11 May 2007 14:18:47 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/04/23/erunit-unit-testing-for-erlang/#comment-679</guid>
					<description>I just posted a little something to hopefully show the differences. I hadn't seen the article before, but I'm glad there's finally a good example showing it's use. I hadn't seen one before.</description>
		<content:encoded><![CDATA[<p>I just posted a little something to hopefully show the differences. I hadn&#8217;t seen the article before, but I&#8217;m glad there&#8217;s finally a good example showing it&#8217;s use. I hadn&#8217;t seen one before.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Comment on ErUnit - Unit Testing for Erlang by Eugene Wallingford</title>
		<link>http://bestfriendchris.com/blog/2007/04/23/erunit-unit-testing-for-erlang/#comment-678</link>
		<pubDate>Thu, 10 May 2007 20:11:10 +0000</pubDate>
		<guid>http://bestfriendchris.com/blog/2007/04/23/erunit-unit-testing-for-erlang/#comment-678</guid>
					<description>Strange.  Twice in one day I read about unit testing frameworks for Erlang.
Have you seen:
http://pragdave.pragprog.com/pragdave/2007/04/testfirst_word_.html
How does it compare to your ErUnit?</description>
		<content:encoded><![CDATA[<p>Strange.  Twice in one day I read about unit testing frameworks for Erlang.<br />
Have you seen:<br />
<a href='http://pragdave.pragprog.com/pragdave/2007/04/testfirst_word_.html' rel='nofollow'>http://pragdave.pragprog.com/pragdave/2007/04/testfirst_word_.html</a><br />
How does it compare to your ErUnit?
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
