如何编写microython测试



我想为我为micro:bit编写的microython代码编写测试。这里的示例使用doctest。我愿意为任何测试系统解决问题。

名为testing_python.py:的工作python示例

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

将microython用于名为testing_micropython.py:的micro:bit的失败示例

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'

我尝试在try中包装"import-micbit"语句,except子句除外。这将使这个简单的示例起作用。但是,当我开始使用micro:bit库中的任何其他非python库函数(如Image或utime(时,doctest将再次失败。

unittest.mock是一个用于在Python中进行测试的库。它允许您用模拟对象替换测试中的系统部分,并断言它们是如何使用的。

这可以用于在没有硬件的情况下编写和测试像microython这样的嵌入式软件。

您可以随心所欲地进行复杂操作,但在导入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。

相关内容

  • 没有找到相关文章

最新更新