如何使用kivy MeshLinePlot运行单元测试?

2024-09-27 09:32:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个应用程序中有一个类,它使用来自kivy_garden.graphMeshLinePlot来在类中的数据更改时更新绘图。我想写一些测试,但是在使用stockunittest模块和pytest时,我遇到了奇怪的错误

下面是我的测试脚本的情况:

# test_container.py
import unittest
from kivy_garden.graph import MeshLinePlot

class Container():
    def __init__(self, id):
        self.id = id
        #self.mesh = MeshLinePlot()

class TestOne(unittest.TestCase):
    def test_dummy(self):
        print('In dummy_test()')
        self.assertEqual(1, 1)

    def test_class_init(self):
        print('In test_class_init()')
        c = Container(1)
        self.assertEqual(c.id, 1)

if __name__ == '__main__':
    unittest.main()

如果按原样运行此代码,则无论是使用unittest.main还是从pytest调用它,这两个测试都将启动并通过。但是,如果取消注释网格在Container中实例化的行,则会得到不同的结果。使用unittest.main(),只有test_class_init()打印任何内容,并且测试结果不会显示:

[INFO   ] [Logger      ] Record log in C:\Users\ganzk\.kivy\logs\kivy_20-07-26_90.txt
[INFO   ] [deps        ] Successfully imported "kivy_deps.glew" 0.2.0
[INFO   ] [deps        ] Successfully imported "kivy_deps.sdl2" 0.2.0
[INFO   ] [Kivy        ] v1.11.1
[INFO   ] [Kivy        ] Installed at "c:\Users\ganzk\Desktop\peaks\kivy_env\lib\site-packages\kivy\__init__.py"
[INFO   ] [Python      ] v3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]
[INFO   ] [Python      ] Interpreter at "c:\Users\ganzk\Desktop\peaks\kivy_env\Scripts\python.exe"
[INFO   ] [Factory     ] 184 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: sdl2
In test_class_init()

现在,如果我们尝试使用pytest(call:pytest test_container.py)运行脚本,则不会得到任何测试结果、打印语句和下面的长回溯:https://pastebin.com/98q7BaeN

有关我的软件包安装的信息:https://pastebin.com/YNMVx2wK

我真的很不明白该如何让它工作。查看initfor MeshLinePlot,它似乎没有做什么,更不用说阻止单元测试继续进行了。我在网上没有看到任何人有类似的问题;有人知道如何让测试在使用MeshLinePlot的类上运行吗?非常感谢


Tags: depspytestselfinfoidimginit
1条回答
网友
1楼 · 发布于 2024-09-27 09:32:21

如果其他人发现了这个,下面是我找到的解决方法。实例化kivy图形指令的测试用例必须从kivy.tests.common.GraphicUnitTest继承。否则,初始化kivy画布等的代码将失败并完全终止您的测试

以下脚本按预期工作:

# test_container.py
import unittest
from kivy_garden.graph import MeshLinePlot
from kivy.tests.common import GraphicUnitTest

class Container():
    def __init__(self, id):
        self.id = id
        self.mesh = MeshLinePlot()

class TestOne(GraphicUnitTest):
    def test_dummy(self):
        print('In dummy_test()')
        self.assertEqual(1, 1)

    def test_class_init(self):
        print('In test_class_init()')
        c = Container(1)
        self.assertEqual(c.id, 1)

if __name__ == '__main__':
    unittest.main()

相关问题 更多 >

    热门问题