正如您似乎已经知道的那样,编写单元测试是为了确保您的代码按预期和设计运行。为此,我们将预期的参数传递给我们的函数并测试我们是否获得了预期的结果。相反,如果我们传递了意想不到的参数,我们想测试我们的函数是否可以处理它们。因此,我们单独运行测试;每个测试方法应该只测试我们应用程序的一个特性。
有时我们需要测试的函数使用不属于我们应用程序的库。这打破了隔离,使测试代码的逻辑变得困难。例如,我们的方法调用了一个外部库(它通过文件系统,创建文件,读取其他文件,最后返回是否成功)。在这个极端的例子中,我们无法控制这个外部库的输出。这使得我们很难测试我们的代码,因为我们不知道库将返回什么。进入模拟。我们会模拟对这个第三方函数的调用以返回我们期望的结果,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
可以返回 2 个不同的东西(顶点集和引发 ValueError),我们的测试需要确保我们可以在适当的时候得到这些结果。
test_undirected_graph.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)
希望我能明确何时需要 Mocks,何时不需要。如果您有更多问题,请告诉我:)