すでにご存知のように、単体テストは、コードが期待どおりに設計どおりに動作することを確認するために作成されます。これを行うには、期待されるパラメーターを関数に渡し、目的の結果が得られるかどうかをテストします。逆に、予期しないパラメーターを渡す場合は、関数がそれらを処理できるかどうかをテストする必要があります。このため、テストを分離して実行します。各テスト メソッドは、アプリケーションの1 つの機能のみをテストする必要があります。
テストする必要がある関数が、アプリケーションの一部ではないライブラリを使用する場合があります。これにより分離が破られ、コードのロジックのテストが難しくなる可能性があります。たとえば、このメソッドは外部ライブラリを呼び出します (ファイル システムを通過し、ファイルを作成し、他のライブラリを読み取り、最後に成功したかどうかを返します)。この極端な例では、この外部ライブラリの出力を制御できません。これにより、ライブラリが何を返すかがわからないため、コードのテストが難しくなります。モッキングに入ります。このサードパーティ関数の呼び出しをモックして、期待どおりの True と False を返します。このようにして、コードが外部ライブラリの実行によるオーバーヘッドなしで両方の結果を処理できることをテストできます。
さて、あなたの質問の残りの部分について:)
vertex_set
サードパーティのライブラリを使用していない場合は、以下が適用されます。
私はvertex_set
それをテストする方法を説明するためにどのように動作するかを作り上げています。
undirected_graph.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)
うまくいけば、モックが必要な場合とそうでない場合が明確になりました。さらに質問がある場合は、お知らせください:)