2016-09-02 7 views
0

私は少し縛られています。テスト可能でない単位テストコードをアドバイスする必要があります

リファクタリングする必要がある開発者によって書かれたPHPプロダクションコードがあります。ただし、テストはゼロです。だから、私はそれをリファクタリングするのが怖いです。

私はユニットテストを書いていますが、多くのコードはRequestクラス(ルーメンに組み込まれています)を使用する必要があるときには$ _GETパラメーターに依存します。

したがって、単体テストの実行は不可能です。

ここには何がありますか?私は$ _GETがもう使われなくなるようにコードを編集することができますが、コードが構造であるように、それを行うことは非常に危険です。

面白いのは、私たちがリファクタリングできるようにテストを書くことですが、テストを書くためには、とにかくリファクタリングを行う必要があるようです。

すべてのアイデアをいただければ幸いです。

+1

''しかし、テストを書くためには、とにかくリファクタリングをしなければならないようです " - かなり、そうです。コードがテスト可能であるように設計されていない場合は、テスト可能にするためにコードを修正する必要があります。 – David

+0

'$ _GET'値を強制することができます。 –

+0

デビッド、それは私が恐怖しているものです。 @JonStirling、私はそれをどうお勧めしますか? – Housni

答えて

1

統合テストまたは受入れテストから始めようとします。次に、単体テストでテストできるように、コードを書き直すという少し自信を持ってくれるものがあります。残念ながら、単体テストできないコードを記述することは可能です。

「アウトサイドインテスト」をご覧ください。

+1

これはもっともらしい解決策のように思えます。私は真剣に考えていましたが、より良い選択肢があるかどうかを見たいと思っていました。 外部テスト:私はGoogleに行くつもりです。 – Housni

0

ただの野生の考え。これは、要求の種類を抽象化することができるという意味で単体テストを書くことが可能ですか?つまり、要求クラス(LumenRequest)と別の子クラス(LegacyRequest)をラップするための基本クラス(RequestBase) )$ _GETをラップして、同じインタフェースを持つようにします。古いコードでは、LegacyRequestでテストを実行し、新しいコードではLumenRequestを使用して実行します。

+0

私はまだこれを行うためにリファクタリングする必要があります。 ここでは、ルータがコントローラメソッドを呼び出してから、他のいくつかのクラスを呼び出します。これは単なる継承ではなく、実際のコントローラが他のコントローラからインスタンス化されています。 – Housni

関連する問題