2016-07-15 11 views
1

私はPython 2.7を使い、TDDに掘り下げています。私は、csvモジュールを使用してcsv.readerオブジェクトを返す単純な関数をテストしようとしています。私は正しいタイプのオブジェクトがassertIsInstanceテストで返されていることをテストしたいと思いますが、この作業を行う方法を理解するのに問題があります。関数がcsv.readerオブジェクトを返すかどうかをテストするためにpython unittestを取得するにはどうすればよいですか?

#!/usr/bin/python 
import os, csv 

def importCSV(fileName): 
    '''importCSV brings in the CSV transaction file to be analyzed''' 
    try: 
    if not(os.path.exists("data")): 
     os.makedirs("data") 
    except(IOError): 
    return "Couldn't create data directory!" 
    try: 
    fileFullName = os.path.join("data", fileName) 
    return csv.reader(file(fileFullName)) 
    except(IOError): 
    return "File not found!" 

テストは現在、このようになります....私は本当にSTRとタイプ機能で「つま先」をラップするとは思わない

#!/usr/bin/python 
from finaImport import finaImport 
import unittest, os, csv 

class testImport(unittest.TestCase): 
    '''Tests for importing a CSV file''' 

    def testImportCSV(self): 
    ''' Test a good file and make sure importCSV returns a csv reader object  ''' 
    readerObject = finaImport.importCSV("toe") 
    self.assertTrue(str(type(readerObject))), "_csv.reader") 

は正しいです。私は何かなどをしようとすると...

self.assertIsInstance(finaImport.importCSV("toe"), csv.reader) 

それは...のような

TypeError: isinstance() arg2 must be a class, type, or tuple of classes and types 

ヘルプをエラーを返します?

答えて

1
self.assertTrue(str(type(readerObject)), "_csv.reader") 

は、私は(上)あなたの最初のテストはそんなに悪くないと思います(私はそこに小さなタイプミスを修正し、あなたは余分な閉じ括弧を持っていました)。型名が正確に "_csv.reader"であることをチェックします。一方、 "_csv"のアンダースコアは、このオブジェクトがcsvモジュールの内部にあることを示しています。一般的に、それについて心配するべきではありません。

csv.readerが機能オブジェクトであるという点でassertIsInstanceテストでの試みに欠陥があります。あなたはREPLでそれをしようとすると、次を参照してください。

>>> import csv 
>>> csv.reader 
<built-in function reader> 

は多くの場合、我々はそれが特定のインタフェースを実装しているかどうかについてのオブジェクトの種類についてはあまり多くを気に。この場合、csv.readerのヘルプは言う:

>>> help(csv.reader) 

...返されたオブジェクトは、イテレータです。

self.assertIsInstance(readerObject, collections.Iterator) 

あなたはもちろん、そのためのimport collectionsが必要になります:...

だから、あなたは、次のテスト(代わりにしたり、他のものに加えて)を行うことができます。そして、イテレータが文字列のリスト、またはこのようなものを返すかどうかテストしたいかもしれません。それは後でフードの下で何かを使うことを許し、テストはまだ通り過ぎます。

関連する問題