相关疑难解决方法(0)

单元测试setUp/tearDown进行多次测试

是否有一个在测试场景的开头/结尾触发的函数?函数setUp和tearDown在每次测试之前/之后触发.

我通常想拥有这个:

class TestSequenceFunctions(unittest.TestCase):

    def setUpScenario(self):
        start() #launched at the beginning, once

    def test_choice(self):
        element = random.choice(self.seq)
        self.assertTrue(element in self.seq)

    def test_sample(self):
        with self.assertRaises(ValueError):
            random.sample(self.seq, 20)
        for element in random.sample(self.seq, 5):
            self.assertTrue(element in self.seq)

    def tearDownScenario(self):
        end() #launched at the end, once
Run Code Online (Sandbox Code Playgroud)

现在,这些setUp和tearDown是单元测试并在我的所有场景中传播(包含许多测试),一个是第一个测试,另一个是最后一个测试.

python unit-testing

107
推荐指数
3
解决办法
7万
查看次数

单元测试与测试之间的依赖关系

你有什么时候做单元测试

  • 一些一般的单元测试
  • 更复杂的测试检查边缘情况,取决于一般情况

举个例子,想象一下测试一个CSV阅读器(我刚刚编写了一个演示符号),

def test_readCsv(): ...

@dependsOn(test_readCsv)
def test_readCsv_duplicateColumnName(): ...

@dependsOn(test_readCsv)
def test_readCsv_unicodeColumnName(): ...
Run Code Online (Sandbox Code Playgroud)

我希望只有在父测试成功的情况下才能运行子测试.这背后的原因是运行这些测试需要时间.许多失败的报告可以归结为一个原因也不会提供信息.当然,我可以把所有边缘情况都塞进主要测试中,但我想知道是否有更有条理的方法来做到这一点.

我发现了这些相关但不同的问题,

更新:

我发现TestNG具有很强的内置支持测试依赖性.你可以写这样的测试,

@Test{dependsOnMethods = ("test_readCsv"))
public void test_readCsv_duplicateColumnName() {
   ...
}
Run Code Online (Sandbox Code Playgroud)

python unit-testing code-organization

24
推荐指数
2
解决办法
1万
查看次数

在单元测试期间不访问全局变量

在此问题立即被标记为重复之前,让我说我已经尝试了每个 解决方案 ,这是与我的情况最相关的两个问题.如果有人能在必要时关闭此问题之前至少查看我的特定问题,我将不胜感激.

我有一个名为e的有限状态机对象,它是一个MCFiniteSM对象.e的核心是名为state_dict的字典,其存储"进程"id('1','2'等)以及存储关于每个"进程"的更多信息的相关字典.我正在运行unittests来添加进程,根据给定的参数更改状态等.但是,在unittest文件中的函数调用之间,有限状态机似乎被清除了.我已经查看了上面列出的两个问题,以避免这种情况并坚持更改,但无论我尝试对有限状态机的更改都不会持久化.这是最简单的文件.

from finite_state_machine import MCFiniteSM
from unittest import TestLoader, TestCase, main as unimain
from datetime import datetime
import time, calendar

class MyUnitTest(TestCase):

    @classmethod
    def setUpClass(cls):
        cls.e = MCFiniteSM()
        cls.timestamp = datetime.strftime(datetime.fromtimestamp(calendar.timegm(time.gmtime())), '%Y/%m/%d %H:%M:%S')

class TestFSM(MyUnitTest):

    @classmethod
    def setUpClass(cls):
        super(TestFSM, cls).setUpClass()
        #e = MCFiniteSM()
        #timestamp = datetime.strftime(datetime.fromtimestamp(calendar.timegm(time.gmtime())), '%Y/%m/%d %H:%M:%S')

    def test_add_convert_processes(self):

        self.e.add_process('1', 'S', self.timestamp, 100, 'start message for process 1')
        self.e.add_process('2', 'S', self.timestamp, 200, 'start message for process 2')
        self.e.add_process('3', 'S', self.timestamp, 300, 'start message …
Run Code Online (Sandbox Code Playgroud)

python

1
推荐指数
1
解决办法
268
查看次数

标签 统计

python ×3

unit-testing ×2

code-organization ×1