模拟我正在用Unites测试的对象

2024-09-29 02:20:22 发布

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

我有一个函数vertex_set,它接受一个变量graph(它是一组边和一组顶点的元组)并返回顶点。该函数位于名为undirected_graph的模块中,它不在类中,而是一个常规函数。你知道吗

我正在编写一个单元测试,我的测试函数如下所示:

def test_vertex_test(self, graph)

我使用的是python3.3.0,它包含内置的mock库。我会模拟这个测试中的graph变量:graph = MagicMock(),然后用这个图调用实函数吗?或者我只是构造一些图然后传递它,然后调用assertEquals来检查它是否返回了真实的东西?你知道吗

我在这里怎么用嘲弄或打短棍?或者在我的例子中是无关紧要的?你知道吗


Tags: 模块函数testselfdef单元测试测试函数内置
1条回答
网友
1楼 · 发布于 2024-09-29 02:20:22

您似乎已经知道,编写单元测试是为了确保您的代码按预期和设计的方式运行。我们通过将期望的参数传递给我们的函数并测试得到期望的结果来实现这一点。相反,如果我们传递意外的参数,我们需要测试我们的函数是否能够处理它们。因此,我们单独运行测试;每个测试方法应该只测试应用程序的一个特性。你知道吗

有时我们需要测试的函数使用的库不是我们应用程序的一部分。这打破了隔离,使得测试代码的逻辑变得困难。例如,我们的方法调用一个外部库(它遍历文件系统,创建文件,读取其他文件,最后返回是否成功)。在这个极端的例子中,我们无法控制这个外部库的输出。这使得我们很难测试代码,因为我们不知道库将返回什么。输入Mocking。我们将模拟对这个第三方函数的调用,以返回我们所期望的,True和False。这样,我们可以测试我们的代码是否可以处理这两个结果,而无需运行外部库的开销。你知道吗

接下来的问题是:)

如果您的vertex_set未使用第三方库,则以下内容适用。你知道吗

我在编vertex_set的工作原理,以便解释如何测试它。你知道吗

无方向的_图形.py你知道吗

def vertex_set(graph):
   """Set's the vertex based on the graph passed.

      Returns set of vertices.
      Raises ValueError if graph is not a tuple of sets.
    """

因为这个vertex_set可以返回两个不同的东西(顶点集和raisevalueerror),所以我们的测试需要确保我们可以在适当的时候得到这些结果。你知道吗

无向测试_图形.py你知道吗

import unittest
import undirected_graph

class UndirectedGraphTestCase(unittest.testCase):
    def test_vertex_set(self):

        # Test we can set a vertex
        graph = ({1, 2}, {3, 4})
        result = undirected_graph.vertex_set(graph)
        self.assertEqual(result. {3, 4})

        # Test we can handle a negative vertex
        graph = ({1, 2}, {-3, -4})
        result = undirected_graph.vertex_set(graph)
        self.assertEqual(result, {-3, -4})

        # Test we can handle when we give an invalid graph
        graph = ()
        self.assertRaises(ValueError, undirected_graph.vertex_set, graph)

希望我能弄清楚什么时候需要模仿,什么时候不需要。如果您有更多问题,请告诉我:)

相关问题 更多 >