2014-10-19 6 views
0

나는 단위 테스트를 처음 사용했습니다. 필자가 작성한 웹 스크레이퍼에 대한 단위 테스트를 작성하고 싶습니다. 내 스크레이퍼는 다른 날짜를 입력하면 결과가 다른 로컬 디스크의 웹 사이트에서 데이터를 수집합니다.unittest web scraper in python

스크립트에 다음과 같은 기능이 있습니다.

get_date [returns date mentioned on web page] 
get_product_and_cost [returns product mentioned and their cost] 

내가 지금까지 내가 보통이

class SimplisticTest(unittest.TestCase): 

    def setUp(self): 
     data = read_file("path to file") 
     self.soup = BeautifulSoup(data,'html5lib') 

    def test_date(self): 
     self.assertIsInstance(get_date(self.soup), str) 

    def test_date_length(self): 
     self.assertEqual(len(get_date(self.soup)),10) 

if __name__ == '__main__': 
    unittest.main() 

답변

2

을 쓴이 functions.So에서 테스트 할 것을 확실하지 않다, 알려진 입력에서 알려진 출력을 테스트하는 것이 좋다. 귀하의 경우에는 반환 유형을 테스트하지만, 반환 된 객체가 입력에서 기대하는 것과 일치하는지 테스트하는 것이 더 낫습니다. 정적 테스트 데이터 (귀하의 경우에는 테스트 웹 페이지)가 유용하게 사용됩니다. self.assertRaises (ExceptionType, method, args)를 사용하여 예외를 테스트 할 수도 있습니다. 아직 읽지 않은 경우 https://docs.python.org/3.4/library/unittest.html을 참조하십시오.

기본적으로 (테스트 페이지와 같은) 적어도 하나의 명시 적 사례, 잘못된 인수 유형 (TypeError 또는 ValueError)처럼 올 수있는 예외 또는 함수에 따라 가능한 없음 반환 유형을 테스트하려고합니다. 반환 유형이나 반환 값만 테스트하지 말고 데이터를 명시 적으로 테스트해야합니다. 따라서 변경된 기능을 찾으면 해당 기능을 찾을 수 있습니다 (변경 사항은 아직 10 개 요소를 반환 할 수 있지만 요소에 잘못된 데이터가 포함될 수 있음). 나는 또한 각 메소드에 대해 하나의 테스트 메소드를 제안했다 : get_date는 테스트 메소드 test_get_date를 가질 것이다.

메소드가 작업을 수행하는 경우에만 찾을 수 있으므로 극단적 인 경우 (큰 입력 데이터, 지원할 수있는만큼 또는 적어도 메소드가 정의 할 수 있음)를 테스트하고 메소드가 정의 (문서)를 기반으로 예상 한 것과 다르게 출력되면 테스트가 실패하고 변경 사항이 조기에 발견됩니다.