2016-12-22 8 views
0

ユニットテストで未修正のオブジェクトにsetUp/tearDownを使用していますか?単体テストで修正されていないオブジェクトにsetUp/tearDownを使用していますか?

問題のオブジェクトを変更し、その状態を追跡する必要があるかどうかはわかっていますが、setUp/tearDownメソッドを使用すると明らかに有益ですが、変更されていないオブジェクトについてはどうでしょうか?

以下の例のmyObjがテスト対象のオブジェクトであることを明確にする必要があります。

class MyTests: XCTestCase { 
    var myObj: MyObj? 

    override func setUp() { 
     super.setUp() 
     myObj = MyObj() 
    } 

    override func tearDown() { 
     myObj = nil 
     super.tearDown() 
    } 

    ... 
} 

class MyTests: XCTestCase { 
    let myObj = MyObj() 

    ... 
} 

EDIThttps://youtu.be/4-KrgRH_Yb0?t=7m57s:私のためにこの質問をきっかけに何がTDDについてのビデオコーディングジョン・リードの最近の品質を見ていました。彼がどのようにsutsetUptearDownにリファクタリングするかに注目してください。私はなぜインスタンス変数として宣言したときに初期化していないのだろうと思っていました。

+0

私はこの質問がより深い何かの縁の周りで踊っているように感じます。上で説明したケースはかなり明白です。複数のサブクラステストで使用される静的な文字列は、おそらく、基本クラスのクラスプロパティとして最もよく宣言されています。あなたが答えようとしているより微妙な質問がありますか? – Palpatim

+0

@Palpatimなぜ私が尋ねているのか私の編集を見てください。 –

+0

プログラマチックであるためには、テストの対象ではないオブジェクトは通常どおりクラスレベルのオブジェクトにすることができ、テストの対象であるオブジェクトは初期設定し、 'setup'や' teardown '。そのようなルールはあなたを助けますか? – jboi

答えて

2

私の質問は、テスト対象のオブジェクトを参照しています。

問題は、あなたの質問で参照例オブジェクトが文字列であるということである宣言で初期化とは対照的に、私はsetUptearDownでそれらを作成する必要がある理由私は思ったんだけど。宣言で文字列を初期化しない理由はで、になります。

ただし、これがMyCoolViewControllerなどの実際のオブジェクトであるとします。今、私たちは、良い状態を保有するものについて話しています。これは、まさに私たちがここで運動するものです。明らかに、このテスト(またはこの一連のテスト)を実行するたびにきれいなスレートで始めたいと思います。したがって、setUpで再初期化することは非常に意味があります。そして、このことはやや重くなるかもしれないので、それを破壊することは意味がありますtearDown

+0

ええ、申し訳ありませんが、私はそのオブジェクトを文字列にしてはいけないので、質問の目的を損なうものではありません。私は質問を更新しました。 –

関連する問題