[TIP] Sclara is a Python testing DSL

Ned Batchelder ned at nedbatchelder.com
Mon Mar 26 05:48:03 PDT 2012


On 3/26/2012 8:28 AM, Staple, Danny (BSKYB) wrote:
>
> Hmm -- I am thinking that a python dsl similar to JS's Jasmine with 
> matchers would be doable.
>
> with describe("foo"):
>
>   It("should throw bar"):
>
>     expect( lambda : foo.doStuff()).toRaise(BarException);
>
I've never seen the value in ladling English all over my test cases.  
How is your code better than what you can currently do with unittest?:

     def test_should_throw_bar(self):
         """foo should throw bar"""
         with self.assertRaises(BarException):
             foo.doStuff()

Not to mention, the snippet you presented isn't valid Python, yet 
involves a lambda...

--Ned.

> There definitely are many python test things other than doctest and 
> unittest (Freshen, Lettuce, PySpec, spec plugin for nose, should-dsl 
> for some). The trick to acceptance is compatibility probably, make 
> sure that there is a nose plugin, that it works with Micheal Foord's 
> mock, that doesn't do such strange magic that it taints the global 
> namespace and makes stuff behave incorrectly.
>
> *From:*testing-in-python-bounces at lists.idyll.org 
> [mailto:testing-in-python-bounces at lists.idyll.org] *On Behalf Of 
> *Alfredo Deza
> *Sent:* 26 March 2012 12:08
> *To:* Chris.Wesseling at cwi.nl
> *Cc:* John MacKenzie; testing-in-python at lists.idyll.org
> *Subject:* Re: [TIP] Sclara is a Python testing DSL
>
> On Mon, Mar 26, 2012 at 3:56 AM, <Chris.Wesseling at cwi.nl 
> <mailto:Chris.Wesseling at cwi.nl>> wrote:
>
> On 2012-03-24T16:00:06-0500, John MacKenzie wrote:
> > http://github.com/198d/sclara
> [...]
>
> > There are failures in both as a demonstration of how this interacts 
> with a
> > TestRunner. The first one proves mainly that this is just Python; if you
> > use one of the provided runners you can execute your test files with the
> > Python interpreter (a big goal after looking at a tool like komira 
> for this
> > sort of thing). The latter demonstrates that a nose plugin is 
> possible and
> > probably implies that a py.test plugin is doable to.
>
> Could you point me to "komira"? Your e-mail turns up as the only
> relevant hit using my search-fu.
>
> Konira is a Testing DSL framework [0] that I started working on about 
> a year and a half ago. It
>
> is not valid Python (hence the DSL connotation) but it is translated 
> to it when tests are run
>
> via de included Test Runner or with the py.test [1] plugin for it.
>
> The problem that I see these solutions (including Konira) bring to the 
> table is that they all try to
>
> create a flexible, descriptive and terse domain for writing tests, and 
> while some of them have a
>
> significant gain over current testing standards, they fail when the 
> complexity goes beyond
>
> asserting something that has a nice description.
>
> It might be heretic to raise this in a testing list for Python, but I 
> also believe that the Python community
>
> is not as pro-innovation in the testing environment as other 
> communities are, which is detrimental to the fact
>
> that there are a few people who don't like the standard testing 
> framework and are looking forwards to an
>
> alternative.
>
>
>     > Beyond sclara, I'm considering the idea that, more than a testing
>     > framework, I stumbled on an interesting pattern for building
>     generic DSLs
>     > in Python (more on this soon, hopefully).
>     >
>     > Thoughts?
>
>     I started reading the tests, to see if the DSL provides the
>     clarity we need in
>     this domain:
>
>     examples/test_sclara.py line 14:
>
>        with test('does not have access to inner setup context') as
>     context:
>            try:
>                context.bar
>            except AttributeError:
>                pass
>
>
>     Will this fail if no AttributeError is thrown?
>
>     And line 45:
>
>        with test('has access to inner setup context') as context:
>            assert context.foo == 'bar'
>
>        with test('has access to outer setup context') as context:
>            assert context.bar == 'foo'
>
>     Shouldn't "inner" and "outer" be swapped here?
>     The outer setup adds foo and baz attributes.
>     The inner setup adds the bar attribute to the context and changes
>     the baz value.
>
>
>     What I see as a pitfall for users with this idiom, is that it
>     might invite to
>     breaking isolation.
>
>     Interesting, though.
>
> [0] http://konira.cafepais.com/docs/index.html
>
> [1] http://pypi.python.org/pypi/pytest-konira
>
>     --
>     Chris Wesseling
>     Centrum Wiskunde & Informatica (CWI)
>     https://www.cwi.nl/people/ccw
>
>     _______________________________________________
>     testing-in-python mailing list
>     testing-in-python at lists.idyll.org
>     <mailto:testing-in-python at lists.idyll.org>
>     http://lists.idyll.org/listinfo/testing-in-python
>
>
> ------------------------------------------------------------------------
>
> **************************************************************************************
> This message is confidential and intended only for the addressee. If 
> you have received this message in error, please immediately notify the 
> postmaster at nds.com and delete it from your system as well as any 
> copies. The content of e-mails as well as traffic data may be 
> monitored by NDS for employment and security purposes. To protect the 
> environment please do not print this e-mail unless necessary.
>
> NDS Limited. Registered Office: One London Road, Staines, Middlesex, 
> TW18 4EX, United Kingdom. A company registered in England and Wales. 
> Registered no. 3080780. VAT no. GB 603 8808 40-00
> **************************************************************************************
>
>
> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20120326/cef1631e/attachment.htm>


More information about the testing-in-python mailing list