如何为 micropython 编写测试
How to write tests for micropython
我想为我正在为 micro:bit 编写的微型 python 代码编写测试。这里的示例使用 doctest。我愿意为任何测试系统解决问题。
工作 python 示例调用 testing_python.py:
def sum(a, b):
'''
>>> sum(3, 0)
3
'''
return a + b
print(sum(2,2))
当我测试时使用:
python -m doctest -v testing_python.py
我得到:
4
Trying:
sum(3, 0)
Expecting:
3
ok
为名为 testing_micropython.py 的 micro:bit 使用 micropython 的失败示例:
from microbit import *
def sum(a, b):
'''
>>> sum(3, 0)
3
'''
return a + b
print(sum(2,2))
当我测试时使用:
python -m doctest -v testing_micropython.py
我明白了
Traceback (most recent call last):
...
ModuleNotFoundError: No module named 'microbit'
我尝试将 'import microbit' 语句包装在 try, except 子句中。这将使这个简单的示例工作。但是,当我开始使用 micro:bit 库中的任何其他非 python 库函数时,例如 Image 或 utime,doctest 将再次失败。
unittest.mock
是 Python 中用于测试的库。它允许您用模拟对象替换被测系统的某些部分,并对它们的使用方式做出断言。
这可以用来在没有硬件的情况下编写和测试 micropython 等嵌入式软件。
您可以随心所欲地复杂化,但是在导入 microbit 模块时不出错的一个简单方法是模拟 microbit
模块。例如有以下文件:
|- testing_micropython.py
|- microbit
|- __init__.py
我的 testing_micropython.py
有:
from microbit import *
def sum(a, b):
"""
>>> sum(3, 0)
3
"""
return a + b
display.show(sum(2,2))
microbit/__init__.py
有:
from unittest.mock import MagicMock
display = MagicMock()
给出以下输出:
python -m doctest -v testing_micropython.py
Trying:
sum(3, 0)
Expecting:
3
ok
1 items had no tests:
testing_micropython
1 items passed all tests:
1 tests in testing_micropython.sum
1 tests in 2 items.
1 passed and 0 failed.
Test passed.
由于 micro:bit 硬件的内存非常有限,我会避免在将加载到 micro:bit 的文件中放置任何不必要的东西,所以我建议避免使用 doctest。
我想为我正在为 micro:bit 编写的微型 python 代码编写测试。这里的示例使用 doctest。我愿意为任何测试系统解决问题。
工作 python 示例调用 testing_python.py:
def sum(a, b):
'''
>>> sum(3, 0)
3
'''
return a + b
print(sum(2,2))
当我测试时使用:
python -m doctest -v testing_python.py
我得到:
4
Trying:
sum(3, 0)
Expecting:
3
ok
为名为 testing_micropython.py 的 micro:bit 使用 micropython 的失败示例:
from microbit import *
def sum(a, b):
'''
>>> sum(3, 0)
3
'''
return a + b
print(sum(2,2))
当我测试时使用:
python -m doctest -v testing_micropython.py
我明白了
Traceback (most recent call last):
...
ModuleNotFoundError: No module named 'microbit'
我尝试将 'import microbit' 语句包装在 try, except 子句中。这将使这个简单的示例工作。但是,当我开始使用 micro:bit 库中的任何其他非 python 库函数时,例如 Image 或 utime,doctest 将再次失败。
unittest.mock
是 Python 中用于测试的库。它允许您用模拟对象替换被测系统的某些部分,并对它们的使用方式做出断言。
这可以用来在没有硬件的情况下编写和测试 micropython 等嵌入式软件。
您可以随心所欲地复杂化,但是在导入 microbit 模块时不出错的一个简单方法是模拟 microbit
模块。例如有以下文件:
|- testing_micropython.py
|- microbit
|- __init__.py
我的 testing_micropython.py
有:
from microbit import *
def sum(a, b):
"""
>>> sum(3, 0)
3
"""
return a + b
display.show(sum(2,2))
microbit/__init__.py
有:
from unittest.mock import MagicMock
display = MagicMock()
给出以下输出:
python -m doctest -v testing_micropython.py
Trying:
sum(3, 0)
Expecting:
3
ok
1 items had no tests:
testing_micropython
1 items passed all tests:
1 tests in testing_micropython.sum
1 tests in 2 items.
1 passed and 0 failed.
Test passed.
由于 micro:bit 硬件的内存非常有限,我会避免在将加载到 micro:bit 的文件中放置任何不必要的东西,所以我建议避免使用 doctest。