如何在Python Idle中运行单元测试?

2024-06-25

我为我的单词出现 Gui 项目创建了一个 python 单元测试,我想测试前 5 个单词的出现情况,因此它应该返回一个真值,但是我不知道如何运行单元测试?我正在尝试使用空闲 shell,但我应该使用 Visual Studio 命令提示符,还是我的单元测试设置不正确? 如果您需要它来完成任务,我将显示下面的代码:

#Imports
import tkinter as tk
from tkinter import *
from tkinter import filedialog
from collections import Counter
from tkinter import messagebox
import collections
import unittest 

# Initialize the dictionary
wordcount = {}

#Unit Test
class TestWordCount(unittest.TestCase):
    def test_count_words(self):
        n_print = 5
        expected_result = {
            'the' : 731,
            'and' : 565,
            'to' : 379,
            'of' : 342,
            'i' : 313
        }

        counter = n_print(int)
        result = counter.count_words()
        assert len(result) == len(expected_result)
        assert result == expected_result
        unittest.Word_Occurence_GUI().run(TestWordCount())
        

#open Macbeth text file
file = open('Macbeth Entire Play.txt', encoding="utf8")
a= file.read()

class Application(tk.Frame):
    def __init__(self, master):
        super().__init__()  # Call __init__() method in parent (tk.Frame)
        
        self.label = tk.Button(self, text='How many words to Sort?', command=self.ask_count)
        self.label.grid(row=0)
        self.open_btn = tk.Button(text='Compute', command=self.ask_count)
        self.open_btn.pack(pady=(30,10))
        self.exit_btn = tk.Button(text='Exit', command=master.destroy)
        self.exit_btn.pack()

    def ask_count(self):
        
        with open('Macbeth Entire Play.txt', encoding="utf8") as file:
            self.file_text = file.read()
        for word in a.lower().split():
          word = word.replace(".","")
          word = word.replace(",","")
          word = word.replace(":","")
          word = word.replace("\"","")
          word = word.replace("!","")
          word = word.replace("“","")
          word = word.replace("‘","")
          word = word.replace("*","")
          if word not in wordcount:
              wordcount[word] = 1
          else:
              wordcount[word] += 1
        n_print = int(input("How many most common words are: "))
        print("\nThe {} most common words are as follows\n".format(n_print))
        word_counter = collections.Counter(wordcount)
        for word, count in word_counter.most_common(n_print):
          print(word, ": ", count)
        messagebox.showinfo("Top words...", "The top words are: \n" + "\n".join([(str(word)+": "+str(count)) for word, count in word_counter.most_common(n_print)]))

        # Close the file
        file.close()
        messagebox.showinfo("The top words are: ")

if __name__ == '__main__':
    root = tk.Tk()
    root.title("Count words")
    root.geometry('400x400+900+50')
    app = Application(root)
    app.pack(expand=True, fill='both')
    root.mainloop()
    #run unit test
    unittest.main()


免责声明:这确实not回答你的问题。这只是一个如何使用的示例unittest以编程方式(而不是从命令行)模块并捕获其输出(尽管not来自 IDLE 和/或作为 Tkinter 应用程序的一部分)。然而,这两件事(从另一个它运行测试并捕获结果)在您的 Tkinter 应用程序中都是必要的。)

正在测试的代码执行的一些操作与您的问题中的操作非常相似。

也就是说,用两种不同的方式对文本文件中的单词进行计数 - 实际上涉及两个单独的测试 - 一个使用collections.Counter字典子类和另一个做同样的事情是“手动”完成的。然后将每个结果与预期结果进行比较。

内容如下very用于测试的简单测试文件:

Here's one line
And another line
And another line make three

这是代码:

import collections
from io import StringIO
import unittest


class TestWordCounts(unittest.TestCase):
    TEST_FILENAME = './sample_e_input.txt'
    EXPECTED_RESULT = {"heres": 1,
                       'one': 1,
                       'line': 3,
                       'and': 2,
                       'another': 2,
                       'make': 1,
                       'three': 1}

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.get_text()

    def test_collections_counter(self):
        ''' Count words collections.Counter. '''
        counter = collections.Counter((word for word in self.clean_text.split()))
        self.assertEqual(len(counter), len(self.EXPECTED_RESULT))
        self.assertEqual(counter, self.EXPECTED_RESULT)
        print('test_collections_counter passed')

    def test_manual_count(self):
        ''' Count words manually. '''
        word_counts = self.count_words(self.clean_text)
        self.assertEqual(len(word_counts), len(self.EXPECTED_RESULT))
        self.assertEqual(word_counts, self.EXPECTED_RESULT)
        print('test_manual_count passed')

    def get_text(self):
        ''' Read test file then convert to lowercase and remove punctuation. '''
        with open(self.TEST_FILENAME, encoding="utf8") as file:
            text = file.read()

        cleaned = text.lower()
        for substring in '. , : " \' ! *'.split():
            cleaned = cleaned.replace(substring, "")
        self.clean_text = cleaned

    def count_words(self, file_text):
        wordcount = collections.defaultdict(int)
        for word in file_text.split():
            wordcount[word] += 1
        return dict(wordcount)


if __name__ == '__main__':

    # Run unit test, capture output, and then print it.
    output = StringIO()
    tests = unittest.TestLoader().loadTestsFromTestCase(TestWordCounts)
    test_result = unittest.TextTestRunner(stream=output).run(tests)
    print(output.getvalue())  # Print captured output from running test.

打印输出:

test_collections_counter passed
test_manual_count passed
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python Idle中运行单元测试? 的相关文章

  • 从networkx中的文件中读取具有pos属性的节点

    我是 Networkx 的新手 我有一个包含以下格式的节点位置的文件 0 23 23 12 23 where 0是一个节点 23 23 and 12 23分别是X和Y坐标 有谁知道如何读取节点pos属性 使用类似的函数read edgeli
  • 使用不带引号的块样式的 Python YAML 转储

    如何使用 PyYAML 加载和转储 YAML 以便它尽可能地使用原始样式 我有 Python 来加载和转储 YAML 数据 例如 import sys import yaml def represent dictorder self dat
  • 使用 setuptools (pip) 时如何打印警告和错误

    我正在使用 setuptools 来打包代码 以便可以使用以下命令轻松安装它 cd project name pip install 在设置过程中 我想警告用户有关预先存在的配置文件的信息 并在系统上打印一些安装后说明 例如 etc pro
  • Django表单中的隐藏字段不在cleaned_data中

    我有这个表格 class CollaboratorForm forms Form user forms CharField label Username max length 100 canvas forms IntegerField wi
  • 从 java 代码运行 Python 脚本

    这是我第一次在java中尝试python 我正在尝试从我的代码执行 python 脚本 如下所示 Process process Runtime getRuntime exec python C Users username Desktop
  • 获取父类名? [复制]

    这个问题在这里已经有答案了 class A object def get class self return self class class B A def init self A init self b B print b get cl
  • 为什么Flask后台线程获取错误的数据库信息?

    为了将实时数据库信息推送到客户端 我在服务器端使用flask socketio 通过使用websocket将所有实时数据库信息推送到客户端 我的视图文件有一个片段 from models import Host from flask soc
  • 使用 Python 访问内存映射文件

    我希望利用激战 2 中的内存映射文件 该文件旨在链接到 Mumble 以获得位置音频 该文件包含有关字符坐标的信息和其他有用的信息 我已经能够使用此脚本访问坐标信息 import mmap import struct last while
  • 并行执行按位运算的代码

    我有这段代码 通过将该 AU 矩阵的每个字节 8 个元素打包到 A 中来减少内存消耗 从而使 100k 200k 矩阵占用更少的空间 正如您所期望的 这段代码需要永远运行 我也计划将行数增加到 200k 我正在一个非常强大的实例 CPU 和
  • 映射 2 个数据帧并替换目标数据帧中匹配值的标头

    我有一个数据框 df1 SAP Name SAP Class SAP Sec Avi 5 C Rison 6 A Slesh 7 B San 8 C Sud 7 B df2 Name Fi Class Avi 5 Rison 6 Slesh
  • 如何在我的 GUI 上绘图

    我正在设计一个 GUIPyQt当我单击一个按钮来绘制我创建的函数的数据图时 我需要显示一个 matplotlib pylab 窗口 它就像 Matlab 中使用的运行时 每次按下该按钮时 我都想将 matplotlib pylab 窗口保留
  • 将列表列表替换为“压缩”列表列表,同时保持顺序

    我有一个列表列表 如我所附的代码所示 如果有任何共同值 我想链接每个子列表 然后我想用列表的精简列表替换列表的列表 例子 如果我有一个清单 1 2 3 3 4 I want 1 2 3 4 如果我有 4 3 1 2 3 I want 4 3
  • 如何在Python中将N毫秒添加到日期时间

    我正在设置一个日期时间变量 fulldate datetime datetime strptime date time Y m d H M S f 其中日期和时间是适合日期时间性质的字符串 如何将此日期时间增加 N 毫秒 Use timed
  • dask分布式内存错误

    在分布式作业上运行 Dask 时 我在调度程序上遇到以下错误 distributed core ERROR Traceback most recent call last File usr local lib python3 4 dist
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • 将 gtk.DrawingArea 保存到文件

    我想使用 PIL 将 gtk DrawingArea 对象内容保存到 jpeg 文件 我特别想添加这个脚本 http pygstdocs berlios de pygst tutorial webcam viewer html制作照片的可能
  • 如何循环遍历列表中除最后一项之外的所有项? [复制]

    这个问题在这里已经有答案了 Using a for循环 如何循环遍历列表中除最后一项之外的所有项 我想遍历一个列表 检查每个项目与后面的项目 我可以在不使用索引的情况下做到这一点吗 for x in y 1 If y是一个生成器 那么上面的
  • 用于监视文件夹和更新数据库的 Python 守护进程

    这专门用于管理 MP3 文件 但它应该可以轻松地适用于任何包含大量文件的目录结构 我想找到或编写一个守护程序 最好用Python 来监视一个包含许多子文件夹的文件夹 这些子文件夹都应该包含X个MP3文件 每当添加 更新或删除文件时 它都应该
  • Maya python 连接选择的属性

    我一直在尝试制作一个简单的脚本 它将采用两个视口选择 然后基本上将第二个视口的旋转连接到第一个 我不确定如何正确地从视口选择中为对象创建变量 这是我的尝试 但不起作用 import maya cmds as cmds sel cmds ls
  • 获取 Flask 中没有端口的请求主机名

    我刚刚设法使用 Flask 获取我的应用程序服务器主机名request host and request url root 但这两个字段都返回请求主机名及其端口 我想使用仅返回请求主机名的字段 方法 而无需进行字符串替换 如果有 没有 We

随机推荐

  • 如何最好地开发网络爬虫

    我习惯于创建一些爬虫来编译信息 当我访问一个网站时 我需要这些信息 我会启动一个专门针对该网站的新爬虫 大部分时间使用 shell 脚本 有时使用 PHP 我做的方法是用一个简单的for要迭代页面列表 awget下载它并sed tr awk
  • TypeORM 不创建表、列等

    我已经建立了一个带有 typeorm 的系统 https github com typeorm typeorm https github com typeorm typeorm 和 NestJs https github com nestj
  • 使用 Firebase Hosting 如何关闭捆绑和缩小?

    我很高兴能够如此快速地将我的 AngularJS 和 Firebase 应用程序部署到 Firebase 托管 但似乎本地 CSS 和 JavaScript 文件在执行 firebase 部署过程中被捆绑和缩小 我想在部署后调试 JavaS
  • 如何在Java中裁剪图像的某些区域?

    我正在尝试执行以下代码 private void crop HttpServletRequest request HttpServletResponse response int x 100 int y 100 int w 3264 int
  • 设置不可调整大小的 GridViewColumn

    我在 C WPF 应用程序中使用 ListView 和 GridViewColumn 对于某些列 我使用可见性管理器 this one https stackoverflow com a 9634769 6479770 但是 当第 1 列和
  • 在不使用PrepareForSegue的情况下在segue之间传递数据

    我正在使用情节提要创建一个用户设置帐户 分 5 个步骤 每个步骤都有一个 ViewController 1 输入姓名 联系人等 2 导入照片 3 输入等 4 更多输入 5 确认页面 如果用户单击 确认 gt 获取所有输入并上传到解析 当我在
  • 未调用[super方法]时发出警告

    不使用 ARC 时 如果未在 dealloc 方法中调用 super dealloc 您会收到警告 我正在尝试实现与经常被子类化的类类似的东西 以在实现子类的人不调用 super 时警告他们 有任何想法吗 llvm的最新版本添加了一个属性
  • JavaFX:使用 PathTransition 作为绘图笔的动画

    示例代码 node Rectangle rect new Rectangle 0 0 20 20 path Text text TextBuilder create text J a v a F X R o c k s font new F
  • 在Python中扁平化复杂的目录结构

    我想将文件从复杂的目录结构移动到一个地方 例如我有这么深的层次结构 foo foo2 1 jpg 2 jpg 我希望它是 1 jpg 2 jpg 我当前的解决方案 def move destination for removal os pa
  • JAX-B - 如何将模式元素映射到现有的 Java 类 [重复]

    这个问题在这里已经有答案了 可能的重复 jaxb xjc 映射到现有域对象 https stackoverflow com questions 10420137 jaxb xjc mapping to existing domain obj
  • 如何让 gulp-typescript 输出到与源文件相同的目录?

    我有以下管道 function typescripts return gulp src paths watchedFiles ts pipe cached typescripts pipe plumber pipe addsrc paths
  • 您使用 Attach() 或按名称或切片调用变量吗?

    许多介绍 R 的书籍和指南都是从附加一个 R 语言的实践开始的 data frame这样您就可以通过名称调用变量 我一直发现用以下方式调用变量是有利的 符号或方括号切片 2 这样我就可以使用多个data frames 而不混淆它们和 或使用
  • StringPiece/StringRef 习惯用法没有更流行有什么原因吗?

    从文档中Chromium源代码中的StringPiece类 http src chromium org viewvc chrome trunk src base string piece h view markup A string lik
  • 强/弱/保留/__unsafe_unretained/分配

    合成属性的属性 保留 分配 保留 它被保留 旧值被释放并被分配 分配 仅分配 所有权财产 iOS5 强 弱 IOS4 保留 unsafe unretained 强 iOS4 保留 我是所有者 你不能释放它 在瞄准之前 保留 弱 iOS 4
  • Selenium 2.0b3 和 IE9/Firefox 4

    在看到 Selenium 2 0b3 现在可以与 Firefox 4 和 IE9 配合使用的公告后 我购买了 Selenium 2 0b3 不幸的是 我在 2 0b3 之前遇到了同样的问题 我在 IE 中找不到元素 完全相同的测试在 IE8
  • 通过JSP显示BLOB(图像)

    我有一个代码来显示员工图表 数据 姓名 电话 照片等 存储在SQLServer中并通过JSP显示 显示数据正常 但图像 jpg 存储在 IMAGE BLOB 列中 除外 顺便说一句 我已经显示了图像 请参见下面的代码 但我不知道如何将其放在
  • 有没有办法限制特定集合中的记录数量

    假设我插入以下记录 例如 foo1 foo2 foo3 foo4 foo10 我希望该集合在任何时间点仅保留 5 条记录 例如 它可能是 foo1 foo5 或 foo2 foo6 或 foo6 foo10 我应该如何实现这个目标 听起来您
  • 有没有一种简单的方法来获取 PHP 中实例化类的文件?

    我想复制这个 myObject new object FILE class object protected path to caller public function construct file this gt path to cal
  • Python 参数的类型检查[重复]

    这个问题在这里已经有答案了 有时检查 Python 中的参数是必要的 例如我有一个函数 它接受网络中其他节点的地址作为原始字符串地址 或者接受封装其他节点信息的 Node 类 我使用 type 函数 如下所示 if type n type
  • 如何在Python Idle中运行单元测试?

    我为我的单词出现 Gui 项目创建了一个 python 单元测试 我想测试前 5 个单词的出现情况 因此它应该返回一个真值 但是我不知道如何运行单元测试 我正在尝试使用空闲 shell 但我应该使用 Visual Studio 命令提示符