上下文管理器单元测试问题 - Python

问题描述

问题可能是微不足道的,但我对 python 中的单元测试知之甚少,我遇到了问题: 任务是创建上下文管理器类,用于测量指令块的执行时间,然后使用其他一些函数对其进行扩展,例如从上次测量开始测量时间等。

这是核心代码,它可以正常工作,在输出中给出执行时间:


from random import randint
import datetime

class Timed:

    def __enter__(self):
        self.start = datetime.datetime.Now()
        return self


    def __exit__(self,*args):
        self.stop = datetime.datetime.Now()
        print(self.stop-self.start)
        return self.stop-self.start

def generate_and_sort(size):
    random_list = [randint(0,1000) for _ in range(size)]
    sorted(random_list)


if __name__ == '__main__':

    with Timed() as timed:
        generate_and_sort(1000000)

这是我的讲师给出的测试,返回 ValueError: invalid literal for int base 10 at assertion lines

import sys
import unittest
from contextlib import contextmanager
from io import StringIO

from zaddom0403_e1 import Timed


@contextmanager
def captured_output():
    new_out,new_err = StringIO(),StringIO()
    old_out,old_err = sys.stdout,sys.stderr
    try:
        sys.stdout,sys.stderr = new_out,new_err
        yield sys.stdout,sys.stderr
    finally:
        sys.stdout,sys.stderr = old_out,old_err


class Zaddom0403_e1(unittest.TestCase):
    def test_timed_usage(self):
        with captured_output() as (out,err):
            with Timed():
                pass

            output = out.getvalue().strip()

        time_without_milliseconds = output[:7]
        milliseconds = output[8:]

        self.assertEqual(time_without_milliseconds,'0:00:00')
        self.assertGreater(int(milliseconds),0)
        self.assertLess(int(milliseconds),100)


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

所以我的问题是 - 我的输出格式或单元测试有问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...