[Zope-dev] zope.sendmail and testing

Jan-Wijbrand Kolman janwijbrand at gmail.com
Tue Aug 25 11:12:53 EDT 2009


Chris Withers wrote:
> Jan-Wijbrand Kolman wrote:
>> Zope.sendmail explains in its README.txt that the developer using 
>> zope.sendmail should himself take care of not sending emails (by setting 
>> up a test layer for example, that would register a no-op IMailDelivery 
>> utility).
> 
> Why not just use testfixtures [1] and Mock [2] to replace the SMTP class 
> in your testcase?
> 
> from mock import Mock
> from testfixtures import replace
> @replace('smtplib.SMTP',Mock())
> def test_mystuff(self):
>     ...
> 
> That way you can check the right smtp calls are made, if you want to, 
> and there's no chance of mail being sent?
> 

My point is that I have to make sure the fixtures/mocking is done even 
in indirect consumers of zope.sendmail.

What I mean is, if I run the tests of my application Foo, that uses an 
application library MyLib where this MyLib library listens for events 
that can trigger email being send, I need to *not forget* to use these 
fixtures or mocks in the test setup of Foo. Even if the code of Foo does 
not itself call zope.sendmail.

I had hoped there would be a way for either zope.sendmail, or perhaps 
for MyLib, to make sure that no mail is ever send when running tests of Foo.

> This latter technique would probably work in a Layer too...

Right, that might work - I would need to define a test layer in MyLib 
and not forget to use this base layer for the tests for Foo. It would be 
slightly better, but it is still something I or a team member could 
forget. Generally that would not be so much of a problem, however I 
would hate to unintentionally send out mail...

Still I wonder about zope.testing.cleanup...


Thanks for the replies so far!
regards,
jw



More information about the Zope-Dev mailing list