2016-06-21 2 views
0

単体テストにはあまりよく慣れていません。たぶんユニットテストとTDDの原則を本当に理解していないかもしれません。それが私が立ち往生していると感じている理由です。ファイル変換のための適切な単体テストの記述方法

テストのコードは次のようになります。

class DevelopingMyClass: 
    def __init__(self): 
     self.firstAttribute = None 

    def openGivenFile(self, filename): 
     f = open(filename, 'r') 
     return f 

    def transformInput(self, filename): 
     res = self.openGivenFile(filename) 
     for line in res.readlines(): 
      newLine = line.replace('a', 'z') 
      print(newLine) 

# start 
myClass = DevelopingMyClass() 
myClass.transformInput('testfile.txt') 

はもちろん、このプログラムはどんな意味がありません。私はちょうど把握しようとしていた:

  • これはテスト可能ですか?はいの場合は、それを正確にテストできるものは何ですか?
  • 私は2つのテストケースを作成する必要があります.1つはオープニングメソッド用、もう1つは変換用です。
  • 私はテストファイルの存在に依存しないように、オープニングを嘲笑しなければなりませんか?
+0

私はいくつかの例を試してみたのを忘れて、オープン関数を模倣しましたが、どれもうまくいきませんでした。私はそれに応じてそれらを変更しようとしたが失敗した... – littleturtle

答えて

0

開発中に単体テストが役立つ理由の1つは、インターフェイスが正しく設計されているかどうかを明らかにすることです。単体テストについては、あなたが設計した機能を使用したいと思う他の人のプログラムについて考えてみてください。

あなたの場合、transformInputメソッド内でprintを使用する際に問題が発生することがあります。またDevelopingMyClassは誤解を招く識別子です。私はかわいくなりたくありません。それは単にあなたの考えをあまり明確にしません。

ユニットテストに入る前に、適切なサンプルを選択する必要があります。ナンセンスの素敵なユニットテストはありません。

ファイルを読み込み、内容を変更してファイルを書き戻したい場合は、まずは簡単な機能から始めます。クラスはあなたをここで助けません。あなたはいつも何らかのオブジェクトを最初に作成するJavaから慣れることができます。しかし、実際には自然ではありません。いくつかのインスタンス変数を内部に保持する必要がある場合(ある状態)、オブジェクトは良好です。

機能がより一般的である場合は、printのような副作用を使用すべきではありません。

言ってやるが、あなたはTDDについて聞いたことがないし、次のようなコードを書く:

#!python3 

def copy_and_filter(fname_from, fname_to): 
    with open(fname_from) as fin, open(fname_to, 'w') as fout: 
     for line in fin: 
      fout.write(line.replace('a', 'z')) 


copy_and_filter('from.txt', 'to.txt') 

(これは実際にあなたのソリューションです。)あなたは、より複雑なコードのためのTDDは、より合理的でしょう。とにかく。

  • 私は、1つのソースファイル名と1つのターゲットファイル名をとる関数が必要です。両方のファイルはテキストファイルです。
  • ソースファイルの内容をコピーして内容を変更し、コピー先に書き込みます。

だから、書く:あなたはそれが呼ばれるべき方法を定義

#!python3 

def copy_and_filter(fname_from, fname_to): 
    pass 


copy_and_filter('from.txt', 'to.txt') 

この方法です。今、ユニットテストを書く時です。

その後、既知のコンテンツを持つファイルの

  • いくつかの例は、ソースファイルが存在しない場合にバグがあることを観察することができる

    • 空のファイル(:あなたは特別なケースをテストしたいです実装はそれを反映する必要があります)、いくつかのテストを追加して実装を修正します。期待することができる

      その他の問題: - ターゲットが を書き込み用にオープンすることはできません - - ソースファイルは、ソースファイル(それがディレクトリであると言う) ないターゲットファイルすでに存在しており、あなたはしたくありませんそれを上書きする

      ファイルをさらにテストすると、ファイルをシミュレートするのが難しいことがわかります。ファイルのようなオブジェクトでコア機能が動作するように内部構造を変更することもできます。

  • 関連する問題