<div dir="ltr">Hi,<div><br></div><div>If you want to limit setup/teardown of the external parts (like your custom hardware), meck [1] is a great tool for mocking</div><div>all or a subset of external dependencies.</div><div>
<br></div><div>Without knowing the internals of your system it's hard to give specific advice, but if you have a bunch of state-full stuff proper [2]</div><div>has some very powerful tools for testing states and reasoning about what should be valid before and after state transitions. Checkout proper_statem [3] and this [4] example of a very useful test implementing the proper_statem callbacks.</div>
<div><br></div><div>Cheers,</div><div>Gustav Simonsson</div><div><br></div><div>[1] <a href="https://github.com/eproxus/meck">https://github.com/eproxus/meck</a></div><div>[2] <a href="http://proper.softlab.ntua.gr/">http://proper.softlab.ntua.gr/</a></div>
<div>[3] <a href="http://proper.softlab.ntua.gr/doc/proper_statem.html">http://proper.softlab.ntua.gr/doc/proper_statem.html</a></div><div>[4] <a href="https://github.com/wooga/locker/blob/master/src/locker_proper.erl">https://github.com/wooga/locker/blob/master/src/locker_proper.erl</a></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jul 25, 2013 at 4:46 PM, David Welton <span dir="ltr"><<a href="mailto:davidnwelton@gmail.com" target="_blank">davidnwelton@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I'm looking for ideas on testing a system we're developing.<br>
<br>
Currently we have nothing, so anything is better than that.  We're<br>
looking to get the most 'bang for our buck', so to speak, so tests<br>
that cover, even if roughly, more code are going to be better in some<br>
ways that something that's too specific to a small part of the system.<br>
<br>
Erlang, in our project, sits in the middle: it offers a web interface<br>
that uses lots of Javascript via Chicago Boss, manages some web<br>
sockets, talks to a database (Postgres), interacts with several C<br>
nodes, and also manages various external programs via erlexec and<br>
open_port.  To add some complexity, specialized hardware is involved<br>
and dealt with via the C programs/nodes.<br>
<br>
I read the chapter on Common Test in Learn You Some Erlang, and that<br>
looks like a pretty good platform.  What I'm struggling with is what<br>
sort of strategy to use to test the whole thing.<br>
<br>
Things I'm dubious about:<br>
<br>
* How to handle the external bits?  It'd be nice if the tests could be<br>
run on a developer's machine without requiring the hardware.  But I<br>
could also see something rigged up to interact with the hardware being<br>
valuable as well.  Forced to choose, I'd go with the former, I think.<br>
<br>
* The interaction with the hardware stuff is kind of complex and<br>
involves a lot of state, and messages going back and forth and input<br>
from the user via the web, storing stuff in the database and so on.<br>
The web portions of things... maybe could be tested in isolation to a<br>
certain point, but the sequence of messages going back and forth is<br>
tricky and probably the place where tests will give us the most<br>
benefits.   I'm used to tests that try and test fairly small chunks of<br>
a system, but I'm not sure how feasible that is in this case - the<br>
setup and teardown might involve a lot of stuff just for a small<br>
test...<br>
<br>
Sorry if this is all a bit muddled - any advice is appreciated!<br>
<br>
Thank you,<br>
--<br>
David N. Welton<br>
<br>
<a href="http://www.welton.it/davidw/" target="_blank">http://www.welton.it/davidw/</a><br>
<br>
<a href="http://www.dedasys.com/" target="_blank">http://www.dedasys.com/</a><br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div>