当前位置: 首页 > 面试题库 >

单元和功能测试基于PySide的应用程序?

栾越
2023-03-14
问题内容

我正在构建一个基于PySide
1.1.0的应用程序,并且一直在寻找一些好的示例来对我的应用程序进行单元和功能测试。我希望能够对UI进行功能测试(模拟单击,按键等),对会更改UI布局的UI插槽进行单元测试(大概使用部分模拟的发送方和接收方),以及单元测试涉及小部件的代码,但不需要渲染任何窗口。

作为一个示例,当将项目添加到为QTreeView提供数据的模型(QAbstractItemModel派生的对象)时,我在菜单栏中动态创建一个菜单的子菜单。模型和子菜单必须保持同步,因此我希望能够编写一个单元测试,以将数据提交给管理模型和子菜单的控制器,并断言模型和子菜单均已正确更新。

如果可以避免的话,我宁愿不必在测试代码中设置QApplication。当我只关心验证小部件中的数据结构而不是可视化时,我也不想显示任何窗口。

在http://www.pyside.org或我的Google搜索中找不到任何合适的值。是否有人对我应该看的示例代码有任何经验或了解?


问题答案:

我一直在研究单元测试pyside代码,得出的结论是,将python的unittest模块与qt的QTest模块结合使用非常好。

您将不得不QApplication实例化一个对象,但是您不需要运行其exec_方法,因为您不需要运行事件循环。

这是一个有关如何测试QCheckBox对话框中的a是否应该执行的示例:

class Test_PwsAddEntryDialog(TestCase):
    """Tests the class PwsAddEntryDialog."""

    def test_password_strength_checking_works(self):
        """Tests if password strength checking works, if the corresponding check
        box is checked.
        """
        d = PwsAddEntryDialog()
        # test default of internal flag
        self.assertFalse(d.testPasswordStrength)
        # type something
        QTest.keyClicks(d.editSecret, "weak", 0, 10)
        # make sure that entered text is not treated as a password
        self.assertEqual(d.labelPasswordStrength.text(), "")
        # click 'is password' checkbox
        QTest.mouseClick(d.checkIsPassword, Qt.LeftButton)
        # test internal flag changed
        self.assertTrue(d.testPasswordStrength)
        # test that label now contains a warning
        self.assertTrue(d.labelPasswordStrength.text().find("too short") > 0)
        # click checkbox again
        QTest.mouseClick(d.checkIsPassword, Qt.LeftButton)
        # check that internal flag once again changed
        self.assertFalse(d.testPasswordStrength)
        # make sure warning disappeared again
        self.assertEqual(d.labelPasswordStrength.text(), "")

这完全可以在屏幕外进行,包括单击窗口小部件并在中键入文本QLineEdit

这是我测试的方法(相当简单)QAbstractListModel

class Test_SectionListModel(TestCase):
    """Tests the class SectionListModel."""

    def test_model_works_as_expected(self):
        """Tests if the expected rows are generated from a sample pws file
        content.
        """
        model = SectionListModel(SAMPLE_PASSWORDS_DICT)
        l = len(SAMPLE_PASSWORDS_DICT)
        self.assertEqual(model.rowCount(None), l)
        i = 0
        for section in SAMPLE_PASSWORDS_DICT.iterkeys():
            self.assertEqual(model.data(model.index(i)), section)
            i += 1

我希望这会有所帮助。



 类似资料:
  • 我想在我的代码中对函数进行单元测试,但当我尝试向其中输入ArrayList时,它会给我提供这里不允许的 这是我的代码:

  • 本章讨论使用 JUnit,Mockito,MRUnit 和 HBaseTestingUtility 对 HBase 应用程序进行单元测试。大部分信息来自关于测试 HBase 应用程序的社区博客文章。有关 HBase 本身的单元测试的信息,请参阅 hbase.tests 。 175. JUnit HBase 使用 JUnit 进行单元测试 此示例将单元测试添加到以下示例类: public class

  • 英文原文:http://emberjs.com/guides/testing/unit-testing-basics/ 尽管Ember.Object是Ember中得基础对象类型,然后能够测试一个简单的Ember.Object是能测试Ember应用各个特定部分的基础。如控制器、组件等。测试Ember.Object就如创建一个对象实例一样简单,设置其状态并针对对象进行断言。作为实例,下面将来介绍一些一

  • 首先所有的包都应该有一定的必要文档,然后同样重要的是对包的测试。 在第 3 章中提到了 Go 的测试工具 gotest, 我们已经在 9.8 节中使用过了。这里我们会用更多的例子进行详细说明。 名为 testing 的包被专门用来进行自动化测试,日志和错误报告。并且还包含一些基准测试函数的功能。 备注:gotest 是 Unix bash 脚本,所以在 Windows 下你需要配置 MINGW 环

  • 问题内容: 所有, 我已经用Java编写了基于命令行的PhoneBook应用程序。该应用程序基本上会询问用户的一些详细信息,例如姓名,年龄,地址和电话号码,并将它们存储在文件中。其他操作包括按名称,电话号码等查找电话簿。所有详细信息都通过控制台输入。 我正在尝试为我已实现的每个功能编写JUnit测试用例,但无法弄清楚如何将实现代码重定向到我的JUnit测试方法中的某个东西,当我的实际代码停止供用户

  • 问题内容: 我正在使用Mocha以便对为node.js编写的应用程序进行单元测试 我想知道是否可以对模块中未导出的功能进行单元测试。 例: 我在其中定义了很多功能 以及一些作为公共导出的功能: 测试用例的结构如下: 显然,这是行不通的,因为没有导出。 对私有方法进行单元测试的正确方法是什么?摩卡咖啡有内置的方法吗? 问题答案: 如果模块未导出功能,则模块外部的测试代码无法调用该功能。那是由于Jav