Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > How to break long method name into more than one line?

Reply
Thread Tools

How to break long method name into more than one line?

 
 
Herman
Guest
Posts: n/a
 
      03-11-2012
I am trying to stick to the rule described in the TDD book that, each
test method name consists of the method name to be tested, inputs and
the expected outputs. It takes up a lot of space and my company has a
rule of limiting 79 characters (or 80) per line. I found that
def abcdeef\
dddaaa(self):
pass

does not work, but
def \
abcsajfoijfiawifoiwejfoi(self):
pass

works. Is this the only way to do it?
 
Reply With Quote
 
 
 
 
Roy Smith
Guest
Posts: n/a
 
      03-11-2012
In article <mailman.571.1331492028.3037.python->,
Herman <> wrote:

> I am trying to stick to the rule described in the TDD book that, each
> test method name consists of the method name to be tested, inputs and
> the expected outputs. It takes up a lot of space and my company has a
> rule of limiting 79 characters (or 80) per line. I found that
> def abcdeef\
> dddaaa(self):
> pass
>
> does not work, but
> def \
> abcsajfoijfiawifoiwejfoi(self):
> pass
>
> works. Is this the only way to do it?


Arrrrrrrrhhhggggg. If you can't fit a test method name into 79
characters, you're doing somthing wrong. Just for fun, I found all the
test methods in the project I'm working on and sorted them by length.
Here's the top of the list:

$ find . -name 'test*py' | xargs grep -h 'def *test' | sort | uniq |
awk '{print length($0), $0}' | sort -nr
55 def test_update_name_changes_dasherized_name(self):
51 def test_get_followers_with_no_followers(self):
50 def test_update_station_song_adds_false(self):
50 def test_anonymous_get_user_collections(self):
49 def test_wrong_user_update_should_fail(self):
49 def test_login_with_email_and_password(self):
47 def test_unknown_station_returns_404(self):
47 def test_login_failure_with_facebook(self):
47 def test_get_follows_with_no_follows(self):
46 def test_station_by_dasherized_name(self):
46 def test_nonexistent_recent_station(self):
46 def test_new_user_with_display_name(self):
46 def test_auto_connect_with_facebook(self):
46 def test_anonymous_created_stations(self):
45 def test_no_php_fatal_error_in_log(self):
45 def test_get_only_songza_followers(self):
45 def test_anonymous_vote_transition(self):
44 def test_non_ascii_global_station(self):
44 def test_global_station_not_found(self):
44 def test_gallery_create_duplicate(self):
44 def test_anonymous_listen_history(self):

and so on down to the wonderfully terse:

21 def test_x(self):

which I'm assuming actually makes sense in the context of the TestCase
class it belongs to. At least I hope it does

The examples above are a reasonable upper limit on the verbosity you
should be shooting for, IMHO.
 
Reply With Quote
 
 
 
 
Steven D'Aprano
Guest
Posts: n/a
 
      03-12-2012
On Sun, 11 Mar 2012 11:53:45 -0700, Herman wrote:

> I am trying to stick to the rule described in the TDD book that, each
> test method name consists of the method name to be tested, inputs and
> the expected outputs.


*The* TDD book? There's only one? Surely not.

That rule sounds utterly impractical. I can't think of anything to
recommend it. Like any other function, method or class, tests should have
meaningful names, but reading the name alone should not necessarily tell
you *everything* about the function.

We have "len", not "len_sequence_or_mapping_int", and similarly it is
perfectly reasonable to have "test_len_empty" rather than
"test_len_emptylist_emptystr_emptyunicode_emptydic t_emptyset_emptytuple_zero".

I expect that naming rule was invented by either people who have heard of
test driven development, but never actually done it, or by people so
anally-retentive that if they make seven short car trips over an hour,
they check the tyre pressure, oil and water seven times because "the
manual says to check before *every* trip".

No offence.

My advice is to moderate the naming convention of your tests with a good
dose of common sense and aim for names which are readable rather than
names that contain everything including the kitchen sink. Imagine you are
in a technical meeting with some of your fellow programmers, and need to
ask for help with a failing test. Imagine saying the name of the test
aloud in a sentence. Does it add clarity to the discussion, or obfuscate
it?

People's short term memory can only hold so much (allegedly "seven plus
or minus two"), and if the name itself hits that limit, you leave nothing
left for the rest of the sentence.

http://en.wikipedia.org/wiki/The_Mag...s_or_Minus_Two

Names should be practically, rather than conforming to some naming rule
that hurts readability and obfuscates the tests.


> It takes up a lot of space and my company has a
> rule of limiting 79 characters (or 80) per line. I found that def
> abcdeef\
> dddaaa(self):
> pass
>
> does not work, but
> def \
> abcsajfoijfiawifoiwejfoi(self):
> pass
>
> works. Is this the only way to do it?


Yes. You can't split tokens over multiple lines, or put any whitespace
between them.


--
Steven
 
Reply With Quote
 
Roy Smith
Guest
Posts: n/a
 
      03-12-2012
In article <4f5d4390$0$29891$c3e8da3$ om>,
Steven D'Aprano <steve+> wrote:

> You can't split tokens over multiple lines, or put any whitespace
> between them.


Well, if you truly wanted to be perverse, you could write some kind of
decorator:

@make_long_named_test_method('some',
'very',
'long',
'list',
'of',
'token',
'fragments')
def x(self):
blah, blah, blah

which creates a "test_some_very_long_list_of_token_fragments" method.
But it would be a lot easier to just use sane method names.
 
Reply With Quote
 
Dennis Lee Bieber
Guest
Posts: n/a
 
      03-12-2012

off topic observation...

On 12 Mar 2012 00:30:08 GMT, Steven D'Aprano
<steve+> declaimed the following in
gmane.comp.python.general:


> I expect that naming rule was invented by either people who have heard of
> test driven development, but never actually done it, or by people so
> anally-retentive that if they make seven short car trips over an hour,
> they check the tyre pressure, oil and water seven times because "the
> manual says to check before *every* trip".
>

By which time they find they have to add air, oil, and water as: the
pressure gauge usage lets out some air each time; they've wiped a few
drops of oil onto a rag each time; and the radiator was still
hot&pressurized such that they got an "overfull" result.
--
Wulfraed Dennis Lee Bieber AF6VN
HTTP://wlfraed.home.netcom.com/

 
Reply With Quote
 
Chris Angelico
Guest
Posts: n/a
 
      03-12-2012
On Tue, Mar 13, 2012 at 3:24 AM, Dennis Lee Bieber
<> wrote:
> On 12 Mar 2012 00:30:08 GMT, Steven D'Aprano
> <steve+> declaimed the following in
> gmane.comp.python.general:
>> I expect that naming rule was invented by either people who have heard of
>> test driven development, but never actually done it, or by people so
>> anally-retentive that if they make seven short car trips over an hour,
>> they check the tyre pressure, oil and water seven times because "the
>> manual says to check before *every* trip".
>>

> * * * *By which time they find they have to add air, oil, and water as: the
> pressure gauge usage lets out some air each time; they've wiped a few
> drops of oil onto a rag each time; and the radiator was still
> hot&pressurized such that they got an "overfull" result.


In defense of such rules: There's a period in every new programmer's
life when it helps to learn a whole lot of principles; and if he's
working on some collaborative project, rules are the easiest way to
demand such behavior. Later on, you learn how and when it's safe to
break the rules (and/or how to deal with rule conflicts), but the
rules still have value. Just never treat them as laws of physics (in
Soviet Physics, rules break you!).

ChrisA
 
Reply With Quote
 
Jean-Michel Pichavant
Guest
Posts: n/a
 
      03-13-2012
Chris Angelico wrote:
> Just never treat them as laws of physics (in
> Soviet Physics, rules break you!).
>
> ChrisA
>


hum ...
I wonder how this political message is relevant to the OP problem.

JM

 
Reply With Quote
 
Chris Angelico
Guest
Posts: n/a
 
      03-13-2012
On Tue, Mar 13, 2012 at 9:30 PM, Jean-Michel Pichavant
<> wrote:
> Chris Angelico wrote:
>>
>> Just never treat them as laws of physics (in
>> Soviet Physics, rules break you!).

>
> hum ...
> I wonder how this political message is relevant to the OP problem.


Ehh, it's a reference to the "in Soviet Russia" theme of one-liners.
You don't break the laws of physics, they break you. My point is that
rules about function names etc are *not* inviolate, and should be
treated accordingly.

ChrisA
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Can one declare more than one signal on one line? Merciadri Luca VHDL 4 11-01-2010 02:00 PM
Having compilation error: no match for call to ‘(const __gnu_cxx::hash<long long int>) (const long long int&)’ veryhotsausage C++ 1 07-04-2008 05:41 PM
Like all great travelers, I have seen more than I remember andremember more than I have seen. shenrilaa@gmail.com C Programming 0 03-05-2008 03:26 AM
JSP: Passing more than one param into method Dave Java 6 10-04-2006 11:53 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57