4

求人応募のJavaコーディング演習についてフィードバックをもらいました。彼らは解決策とフィードバックに記載されている2つの問題を気に入らなかった(非常にまれなフィードバックが与えられるので私は非常に感謝している):

  • どうやら、私はTDDアプローチを使用しませんでした。
  • 私は静的メソッドを使いすぎました。静的メソッドは反OOであることを知っていますが、検証とutilタイプのメソッドでのみ使用しました。

したがって、ここで2つの質問があります。

TDDアプローチを使用しないことの考えられる兆候は何ですか?

静的メソッドの代わりに使用できるコーディングスタイルまたはパターンは何ですか?

最初の2つの回答に続いて、別の質問があります。

静的メソッドを使用することは、コードのテスト容易性を制限する場合にのみ悪いことであり、それ自体が悪いことではないことに同意しますか。

それで、静的メソッドが私のコードのテスト可能性を制限しない場合、私の求人応募演習ソリューションに戻ると、それでも使用するのは悪いですか?私のvalidateメソッドは非常に単純でした'Validator.notNull(p、 "paramName")'では、なぜそれをモックしたいのでしょうか?

どうもありがとう。

4

2 に答える 2

5

TDDを使用していないことの明らかな兆候は、共同作業者のための静的メソッドと静的クラスメンバーの使用です。静的メソッドをオーバーライドすることはできないため、モックを代用して、そのようなメソッドを単独で使用してクラスをテストすることはできません。

コラボレーターで静的コラボレーターまたは静的メソッドを使用する代わりに、依存性注入を使用できます。簡単なコーディング演習では、コンストラクターまたはセッターを介して手動で依存性を注入します。実際には、利用可能な依存関係フレームワークの1つを使用できます。

于 2013-02-20T17:49:04.910 に答える
2

あなたの静的Validatonメソッドは、私にはオブジェクトの一部であるはずの何かのようです。

クラスがあるとしましょうDrink

public class Drink
{
    private readonly string _name;
    private readonly double _temperature;

    public Drink(string name, double temperature)
    {
        _name = name;
        _temperature = temperature;
    }
}

ビジネスロジックは、7up、コーラなど、あらゆる種類の飲み物をインスタンス化できます。あなたは飲み物がそれを飲むのに適切な温度を持っていることを確認したいので、あなたはValidate方法の必要があります。あなたはあなたのアプローチに従うことができます:

public void TakeAZip()
{
    if (Validation.HasAppropriateTemp)
    {
        // implement drink
    }
}

'

静的クラスの代替

Validationそうすれば、静的クラスに強く依存することになります。

または、依存性注入を利用することもできます。

public void TakeAZip(ITemperatureValidator validator)
{
    if (validator.HasAppropriateTemp)
    {
        // implement drink
    }
}

より便利な場合はValidator、コンストラクターを介してパスを渡すこともできます

    private readonly string _name;
    private readonly double _temperature;
    private ITemperatureValidator _validator;

    public Drink(
        string name, 
        double temperature, 
        ITemperatureValidator validator)
    {
        _name = name;
        _temperature = temperature;
        _validator = validator;
    }

これで、バリデーターの動作をモックDrinkでき、クラスをすべての外部動作から分離できます。

于 2013-02-20T20:47:41.937 に答える