Re: Can a user cheat and call a class's private method?

2015-05-12 Thread Darren Duncan

On 2015-05-12 12:40 PM, R. Ransbottom wrote:

On Mon, May 11, 2015 at 03:22:46PM -0700, Darren Duncan wrote:


you can use trusts.  Also having to do this may indicate bad code
design. -- Darren Duncan


I saw Moritz' and Carl's responses and I agree with the smell
issue.

Given that the code exists and needs testing, 'augment' seems
preferable to 'trust'.  'augment' avoids the predeclaration
issue and simplifies the test code by removing indirection.

Is class finalization implemented?  Searching the synopses, I
found only a mention.


The other question is whether your private need to be private.

Generally speaking tests should only be against a public interface, and if you 
really need to test something private then maybe a refactoring of the thing 
being tested is in order.


For example splitting it into multiple classes where what was private becomes 
the public API of a utility consumed by the other class.


Any private routines you should be able to test sufficiently indirectly by way 
of public routines that use them, if the code is well organized.


-- Darren Duncan




Re: Can a user cheat and call a class's private method?

2015-05-12 Thread Moritz Lenz
Hi,

On 05/12/2015 09:40 PM, R. Ransbottom wrote:
 On Mon, May 11, 2015 at 03:22:46PM -0700, Darren Duncan wrote:
 
 you can use trusts.  Also having to do this may indicate bad code
 design. -- Darren Duncan
 
 I saw Moritz' and Carl's responses and I agree with the smell
 issue.  
 
 Given that the code exists and needs testing,

I'm curious, what's a case where private state of a class needs to be
tested, and tests agains the public interface are not enough?

In my experience, testing against private parts only makes the tests
more brittle (that is, every implementation change causes test failures,
even if the public interface is unchanged).

Also, are you talking about an actual Perl 6 code base that needs
testing, but that is too large for a refactoring? If yes, I'd be curious
where such a beast exists.

 Is class finalization implemented?

I don't think so.

Cheers,
Moritz