how to make a Python Test Driven Development environment automatically on Windows without Windows Subsystem for Linux


To review, here are steps I take to make the environment for every project

  1. I give the project a name

  2. I make a directory for the project

  3. I change directory to the project

  4. I make a directory for the source code named ‘src’

  5. I make a Python file to hold the source code in the ‘src’ folder

  6. I make a directory for the tests

  7. I make the ‘tests’ folder a Python package

  8. I make a Python file to hold the tests in the ‘tests’ folder

  9. I add the first failing test to the test file

  10. I make a virtual environment

  11. I activate the virtual environment

  12. I upgrade the Python package manager

  13. I make a requirements file for the needed Python packages

  14. I install the packages listed in the requirements file

  15. I run the tests automatically

  16. I open the test file in the editor from the terminal

  17. I make the test pass

  18. then I start working on the project

I want to give one command for the program to do every step except

  • give the project a name

  • make the test pass and

  • work on the project

I only want to do 3 steps not 18


preview

Here is the program_ I have by the end of the chapter to automatically make a python test driven development environment, it is only 27 lines of code, with spaces

 1mkdir more_magic
 2cd more_magic
 3mkdir src
 4New-Item "src/more_magic.py"
 5mkdir tests
 6New-Item tests/__init__.py
 7
 8"import unittest
 9
10
11class TestMoreMagic(unittest.TestCase):
12
13    def test_failure(self):
14        self.assertFalse(True)
15
16
17# Exceptions seen
18# AssertionError
19" | Out-File "tests/test_more_magic.py" -Encoding UTF8
20
21python -m venv .venv
22.venv/scripts/activate.ps1
23python -m pip install --upgrade pip
24"pytest-watch" | Out-File requirements.txt -Encoding UTF8
25python -m pip install --requirement requirements.txt
26pytest-watch

questions about making a Python Test Driven Development Environment automatically on Windows without Windows Subsystem for Linux

Here are questions you can answer after going through this chapter


how to make a PowerShell script

  • I go to the terminal_ and use `New-Item`_ to make an empty file_ with a name that is easy to remember later. I want the name to also describe the program_ that will automatically make a Test Driven Development environment for me

    New-Item makePythonTdd.ps1
    

    the terminal_ goes back to the command line

  • I open makePythonTdd.ps1 in the editor of the `Integrated Development Environment (IDE)`_, then add the commands I use to make a Python_ Test Driven Development environment for a project

     1mkdir magic_again
     2cd magic_again
     3mkdir src
     4New-Item src/magic_again.py
     5mkdir tests
     6New-Item tests/__init__.py
     7New-Item tests/test_magic_again.py
     8python -m venv .venv
     9.venv/scripts/activate.ps1
    10python -m pip install --upgrade pip
    11"pytest-watch" | Out-File requirements.txt -Encoding UTF8
    12python -m pip install --requirement requirements.txt
    13pytest-watch
    
  • test_magic_again.py is an empty file_ becuase I used `New-Item`_. I want it to have the text for the first failure so I do not have to open the editor to add the text for it in each project. I use `Out-File`_ to add the text to test_magic_again.py when it makes the file_ in the tests folder_, the same I do with the requirements.txt file_

     5mkdir tests
     6New-Item tests/__init__.py
     7
     8"" | Out-File "tests/test_magic.py" -Encoding UTF8
     9
    10python -m venv .venv
    11.venv/scripts/activate.ps1
    
  • I add the text for the test inside the quotes (“”) I just added to makePythonTdd.sh, the way I do with `Out-File`_ when I add "pytest-watch" as text in requirements.txt

    Caution

    Indentation_ is important in Python_, I use 4 spaces as convention in this book, see the Python Style Guide for more

     8"import unittest
     9
    10
    11class TestMagicAgain(unittest.TestCase):
    12
    13    def test_failure(self):
    14        self.assertFalse(True)
    15
    16
    17# Exceptions seen
    18# AssertionError
    19" | Out-File "tests/test_magic_again.py" -Encoding UTF8
    

how to run a PowerShell script

  • I go back to the terminal_ to run the program_

    makePythonTdd.ps1
    

    the terminal_ shows

    command not found: makePythonTdd.ps1
    

    I have to tell the computer where the file_ is

    .\makePythonTdd.ps1
    

    .\ is shorthand for this directory which in this case is pumping_python where makePythonTdd.ps1 is saved. The terminal_ shows

    ======================================= FAILURES =======================================
    _____________________________ TestMagicAgain.test_failure _____________________________
    
    self = <tests.test_magic_again.TestMagicAgain testMethod=test_failure>
    
        def test_failure(self):
    >       self.assertFalse(True)
    E       AssertionError: True is not false
    
    tests/test_magic_again.py:7: AssertionError
    =============================== short test summary info ================================
    FAILED tests/test_magic_again.py::TestMagicAgain::test_failure - AssertionError: True is not false
    ================================== 1 failed in X.YZs ===================================
    

    Success! I just made a program_ that can make the magic_again project anytime I want and it automatically does the steps I did manually.

  • I hold ctrl on the keyboard and click on tests/test_magic_again.py to open it in the editor then make the test pass

  • I hit ctrl+c in the terminal_ to stop the test

  • I deactivate the `virtual environment`_

    deactivate
    

    the terminal_ goes back to the command line

  • I leave the magic folder to go back to the pumping_python folder_

    cd ..
    

    the terminal_ shows

    ...\pumping_python >
    
  • I want to use makePythonTdd.ps1 to make another project with a different name. I change magic_again to the name of the new project in the editor

    Note

    The lines that are changing in the code are highlighted

     1mkdir more_magic
     2cd more_magic
     3mkdir src
     4touch src/more_magic.py
     5mkdir tests
     6touch tests/__init__.py
     7
     8"import unittest
     9
    10
    11class TestMoreMagic(unittest.TestCase):
    12
    13    def test_failure(self):
    14        self.assertFalse(True)
    15
    16
    17# Exceptions seen
    18# AssertionError
    19" | Out-File "tests/test_more_magic.py" - Encoding UTF8
    
  • I run makePythonTdd.ps1 in the terminal_ to make a project named more_magic

    ./makePythonTdd.ps1
    

    the terminal_ shows AssertionError

    ======================================= FAILURES =======================================
    _____________________________ TestMoreMagic.test_failure ______________________________
    
    self = <tests.test_more_magic.TestMoreMagic testMethod=test_failure>
    
        def test_failure(self):
    >       self.assertFalse(True)
    E       AssertionError: True is not false
    
    tests/test_more_magic.py:7: AssertionError
    =============================== short test summary info ================================
    FAILED tests/test_more_magic.py::TestMoreMagic::test_failure - AssertionError: True is not false
    ================================== 1 failed in X.YZs ===================================
    

    I make the test pass

  • I hit ctrl+c to exit the tests in the terminal_

the program_ works and can make a Python_ Test Driven Development environment automatically the way I want every time


close the project

  • I close the test_more_magic.py in the editor I had open

  • I click in the terminal_ and exit the tests with ctrl+c on the keyboard

  • I deactivate the `virtual environment`_

    deactivate
    

    the terminal_ goes back to the command line, (.venv) is no longer on the left side

    ...\pumping_python\more_magic
    
  • I `change directory`_ to the parent of more_magic

    cd ..
    

    the terminal_ shows

    ...\pumping_python
    

    I am back in the pumping_python directory_


review

`Computer Programming`_ allows me to take some steps and make them a one line command for the computer to do for me. You have seen a way I can make a Python_ Test Driven Development environment, with a program to do it on any Windows_ computer without `Windows Subsystem for Linux`_.

How many questions can you answer after going through this chapter?


Click Here to see the code for the program to make a Python Test Driven Development environment for any Linux or MacOS computers


what is next?

Here is what we have gone through together so far

Would you like to use makePythonTdd.ps1 to make a Python Test Driven Development environment to test that an Exception is raised?


rate pumping python

If this has been a 7 star experience for you, please leave a 5 star review. It helps other people get into the book too