2013-03-01 8 views
1

변수 (가장자리 세트와 정점 세트의 튜플)을 취하여 정점을 반환하는 함수 vertex_set이 있습니다. 이 함수는 undirected_graph이라는 모듈에 있으며 클래스에는 없지만 일반 함수입니다.unittest로 테스트중인 객체 조롱

I는 단위 테스트를 쓰고 있어요 내 테스트 기능은 다음과 같습니다 : 나는 mock 라이브러리 내장이 들어 파이썬 3.3.0를 사용하고

def test_vertex_test(self, graph) 

합니다. 이 테스트에서 변수를 조롱 했습니까? graph = MagicMock()이 그래프로 실제 함수를 호출합니까? 아니면 그냥 그래프를 만든 다음 전달하고 assertEquals을 호출하면 실제 결과가 반환되었는지 확인할 수 있습니까?

여기 조롱이나 스터 빙은 어떻게 사용합니까? 아니면 나의 예에서 무관 한가?

답변

1

이미 알고있는 것처럼 단위 테스트는 코드가 예상대로 작동하고 설계되었는지 확인하기 위해 작성되었습니다. 예상되는 매개 변수를 함수에 전달하고 원하는 결과를 얻는 방법으로 테스트를 수행합니다. 반대로 예기치 않은 매개 변수를 전달하면 함수가이를 처리 할 수 ​​있는지 테스트하려고합니다. 이 때문에 우리는 격리 된 테스트를 실행합니다. 각 테스트 방법은 하나만 응용 프로그램의 기능을 테스트해야합니다.

우리가 테스트해야 할 기능이 우리 응용 프로그램의 일부가 아닌 라이브러리를 사용할 때가 있습니다. 이로 인해 격리가 중단되고 코드의 논리를 테스트하기가 어려워 질 수 있습니다. 예를 들어, 우리의 메서드는 외부 라이브러리 (파일 시스템을 통과하고, 파일을 만들고, 다른 파일을 읽은 다음, 성공했는지 여부를 반환합니다)를 호출합니다. 이 극단적 인 예에서는이 외부 라이브러리의 출력을 제어 할 수 없습니다. 따라서 라이브러리가 반환 할 내용을 알 수 없으므로 코드를 테스트하기가 어렵습니다. 조롱을 입력하십시오. 우리는이 제 3 자 함수에 대한 호출을 모방하여 우리가 기대하는 바를 True와 False로 반환합니다. 이 방법을 사용하면 우리 코드가 외부 라이브러리의 오버 헤드없이 두 결과를 모두 처리 할 수 ​​있는지 테스트 할 수 있습니다.

지금, 당신의 질문 :)의 나머지 부분에 대한

당신의 제 3 자 라이브러리를 사용하지 않는 vertex_set 경우, 다음이 적용됩니다.

어떻게 테스트하는지 설명하기 위해 vertex_set의 작동 방식을 구성하고 있습니다.

vertex_set 이후

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. 
    """ 

이 (정점의 세트에 ValueError 인상)이 다른 일을 반환 할 수 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) 

test_undirected_graph.py는 다행스럽게도 필자는 모의 객체가 필요할 때 분명히합니다. 더 궁금한 점이 있으면 알려주세요.

관련 문제