Date: Sun, 22 Jul 2018 21:00:00 -0400
<h3>Summary</h3> <p>Michael Foord has been working on building and testing software in Python for over a decade. One of his most notable and widely used contributions to the community is the Mock library, which has been incorporated into the standard library. In this episode he explains how he got involved in the community, why testing has been such a strong focus throughout his career, the uses and hazards of mocked objects, and how he is transitioning to freelancing full time.</p> <h3>Preface</h3> <ul> <li>Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.</li> <li>When you’re ready to launch your next app you’ll need somewhere to deploy it, so check out Linode. With private networking, shared block storage, node balancers, and a 200Gbit network, all controlled by a brand new API you’ve got everything you need to scale up. Go to <a href="https://www.pythonpodcast.com/linode?utm_source=rss&utm_medium=rss">podcastinit.com/linode</a> to get a $20 credit and launch a new server in under a minute.</li> <li>Visit the <a href="https://www.pythonpodcast.com?utm_source=rss&utm_medium=rss">site</a> to subscribe to the show, sign up for the newsletter, and read the show notes. And if you have any questions, comments, or suggestions I would love to hear them. You can reach me on Twitter at <a href="https://twtiter.com/podcastinit?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">@Podcast__init__</a> or email <a href="mailto:hosts@podcastinit.com">hosts@podcastinit.com</a>)</li> <li>To help other people find the show please leave a review on <a href="https://itunes.apple.com/us/podcast/podcast.-init/id981834425?mt=2&uo=6&at=&ct=&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">iTunes</a>, or <a href="https://play.google.com/music/m/I7ogju4xv6adasgqz6545jndgsy?t=Podcastinit_-_Python_and_the_people_who_make_it_great&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Google Play Music</a>, tell your friends and co-workers, and share it on social media.</li> <li>Join the community in the new Zulip chat workspace at <a href="https://www.pythonpodcast.com/chat?utm_source=rss&utm_medium=rss">podcastinit.com/chat</a></li> <li>Your host as usual is Tobias Macey and today I’m interviewing Michael Foord mockingly, about his career in Python</li> </ul> <h3>Interview</h3> <ul> <li>Introductions</li> <li>How did you get introduced to Python?</li> <li>One of the main threads in your career appears to be software testing. What aspects of testing do you find so interesting and how did you first get exposed to that aspect of building software? <ul> <li>How has the language and ecosystem support for testing evolved over the course of your career?</li> <li>What are some of the areas that you find it to still be lacking?</li> </ul> </li> <li>Mock is one of your projects that has been widely adopted and ultimately incorporated into the standard library. What was your reason for starting it in the first place? <ul> <li>Mocking can be a controversial topic. What are your current thoughts on how and when to use mocks, stubs, and fixtures?</li> </ul> </li> <li>How do you view the state of the art for testing in Python as it compares to other languages that you have worked in?</li> <li>You were fairly early in the move to supporting Python 2 and 3 in a single project with Mock. How has that overall experience changed in the intervening years since Python 2.4 and 3.2?</li> <li>What are some of the notable evolutions in Python and the software industry that you have experienced over your career?</li> <li>You recently transitioned to acting as a software trainer and consultant full time. Where are you focusing your energy currently and what are your grand plans for the future?</li> </ul> <h3>Keep In Touch</h3> <ul> <li><a href="mailto:michael@python.org">Email</a></li> <li><a href="https://www.agileabstractions.com?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Website</a></li> <li><a href="http://www.twitter.com/voidspace?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Twitter</a></li> </ul> <h3>Picks</h3> <ul> <li>Tobias <ul> <li><a href="https://www.templarco.co.uk/templar-books/ology-world?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">-Ology Books</a></li> </ul> </li> <li>Michael <ul> <li><a href="https://www.imaginaryauthors.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Imaginary Authors</a></li> <li><a href="https://www.imaginaryauthors.com/product/falling-into-the-sea/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Falling Into The Sea</a></li> <li><a href="https://www.imaginaryauthors.com/product/a-city-on-fire/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">City On Fire</a></li> </ul> </li> </ul> <h3>Links</h3> <ul> <li><a href="http://ironpython.net/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">IronPython</a></li> <li><a href="https://en.wikipedia.org/wiki/London?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">London</a></li> <li><a href="https://www.manning.com/books/ironpython-in-action?&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">IronPython in Action</a></li> <li><a href="https://docs.python.org/dev/library/unittest.mock.html#module-unittest.mock?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Mock</a></li> <li><a href="https://docs.python.org/dev/library/unittest.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">UnitTest</a></li> <li><a href="https://en.wikipedia.org/wiki/Play-by-mail_game?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Play By Email</a></li> <li><a href="https://en.wikipedia.org/wiki/Smalltalk?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Smalltalk</a></li> <li><a href="https://en.wikipedia.org/wiki/Regular_expression?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Regular Expression</a></li> <li><a href="https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Dijkstra’s Algorithm</a></li> <li><a href="https://docs.python.org/2/library/urllib2.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">urllib2</a></li> <li><a href="https://en.wikipedia.org/wiki/Resolver_One?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Resolver Systems</a></li> <li><a href="https://en.wikipedia.org/wiki/Test-driven_development?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">TDD (Test-Driven Development)</a></li> <li><a href="https://us.pycon.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">PyCon</a></li> <li><a href="https://trent.me/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Trent Nelson</a></li> <li><a href="https://en.wikipedia.org/wiki/Fractal?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Fractals</a></li> <li><a href="https://unicode.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Unicode</a></li> <li><a href="https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Joel Spolsky (Unicode)</a></li> <li><a href="https://en.wikipedia.org/wiki/Object-oriented_programming?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">OOP (Object-Oriented Programming)</a></li> <li><a href="https://www.softwaretestinghelp.com/what-is-end-to-end-testing/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">End-to-end Testing</a></li> <li><a href="https://en.wikipedia.org/wiki/Unit_testing?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Unit Testing</a></li> <li><a href="https://www.canonical.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Canonical</a></li> <li><a href="https://www.seleniumhq.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Selenium</a></li> <li><a href="https://www.ansible.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Ansible</a></li> <li><a href="https://www.ansible.com/products/tower?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Ansible Tower</a> <ul> <li><a href="https://github.com/ansible/awx?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">AWX (Open Source Tower Codebase)</a></li> </ul> </li> <li><a href="https://en.wikipedia.org/wiki/Continuous_integration?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Continuous Integration</a></li> <li><a href="https://en.wikipedia.org/wiki/Continuous_delivery?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Continuous Delivery</a></li> <li><a href="https://en.wikipedia.org/wiki/Agile_software_development?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Agile Software Development</a></li> <li><a href="https://github.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">GitHub</a></li> <li><a href="https://about.gitlab.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">GitLab</a></li> <li><a href="https://jenkins.io/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Jenkins</a></li> <li><a href="http://nightwatchjs.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Nightwatch.js</a></li> <li><a href="https://docs.pytest.org/en/latest/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">py.test</a></li> <li><a href="https://martinfowler.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Martin Fowler</a></li> <li><a href="https://en.wikipedia.org/wiki/Monkey_patch?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Monkey Patching</a></li> <li><a href="https://realpython.com/primer-on-python-decorators/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Decorator</a></li> <li><a href="http://eigenhombre.com/introduction-to-context-managers-in-python.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Context Manager</a></li> <li><a href="https://docs.python.org/3/library/unittest.mock.html#auto-speccing?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">autospec</a></li> <li><a href="https://golang.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Golang</a></li> <li><a href="https://docs.python.org/3.7/library/2to3.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">2to3</a></li> <li><a href="https://pythonhosted.org/six/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Six</a></li> <li><a href="https://www.youtube.com/watch?v=66XoCk79kjM&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Instagram Keynote</a></li> <li><a href="http://trans-code.github.io/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Trans-code</a></li> <li><a href="https://djangogirls.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Django Girls</a></li> <li><a href="http://www.pyladies.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">PyLadies</a></li> <li><a href="https://agileabstractions.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Agile Abstractions</a></li> <li><a href="https://www.dabeaz.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">David Beazley</a></li> </ul> <p>The intro and outro music is from Requiem for a Fish <a href="http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Freak Fandango Orchestra</a> / <a href="http://creativecommons.org/licenses/by-sa/3.0/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">CC BY-SA</a><img alt="" height="0" src="https://analytics.boundlessnotions.com/piwik.php?idsite=1&rec=1&url=https%3A%2F%2Fwww.pythonpodcast.com%2Fmichael-foord-on-testing-mock-tdd-and-the-python-community-episode-171%2F&action_name=Michael+Foord+On+Testing%2C+Mock%2C+TDD%2C+And+The+Python+Community+-+Episode+171&urlref=https%3A%2F%2Fwww.pythonpodcast.com%2Ffeed%2F&utm_source=rss&utm_medium=rss" style="border: 0; width: 0; height: 0;" width="0" /></p>