हमारे जावा कोडबेस में मैं निम्नलिखित पैटर्न देखता हूं:
/**
This is a stateless utility class
that groups useful foo-related operations, often with side effects.
*/
public class FooUtil {
public int foo(...) {...}
public void bar(...) {...}
}
/**
This class does applied foo-related things.
*/
class FooSomething {
int DoBusinessWithFoo(FooUtil fooUtil, ...) {
if (fooUtil.foo(...)) fooUtil.bar(...);
}
}
मुझे परेशान करता है कि मुझे FooUtilहर जगह एक उदाहरण देना होगा , क्योंकि परीक्षण।
- मैं
FooUtilतरीकों को स्थिर नहीं बना सकता , क्योंकि मैं उन्हेंFooUtilऔर उसके ग्राहक वर्गों दोनों के परीक्षण के लिए उनका मजाक नहीं उड़ा पाऊंगा । - मैं फिर
FooUtilसे उपभोग की जगह पर एक उदाहरण नहीं बना सकताnew, क्योंकि मैं इसे परीक्षण के लिए नकली नहीं कर पाऊंगा।
मुझे लगता है कि मेरा सबसे अच्छा शर्त इंजेक्शन का उपयोग करना है (और मैं करता हूं), लेकिन यह परेशानियों के अपने सेट को जोड़ता है। इसके अलावा, कई उपयोग उदाहरणों को पारित करने से विधि पैरामीटर सूचियों का आकार बढ़ जाता है।
क्या इसे बेहतर तरीके से संभालने का कोई तरीका है जो मैं नहीं देख रहा हूं?
अपडेट: चूंकि उपयोगिता कक्षाएं स्टेटलेस हैं, इसलिए मैं शायद परीक्षण के लिए क्लास के अंतर्निहित स्थिर क्षेत्र को अपडेट करने की क्षमता को बनाए रखते हुए एक स्थिर एकल INSTANCEसदस्य, या एक स्थिर getInstance()विधि जोड़ सकता हूं । साफ-सुथरा भी नहीं लगता।
FooUtilतरीकों को डाल दिया जाए FooSomething, हो सकता है FooSomethingकि वहाँ के गुणों को बदल दिया जाए / बढ़ाया जाए ताकि FooUtilतरीकों की अब और ज़रूरत न हो। कृपया हमें FooSomethingइस सवाल का एक अच्छा जवाब प्रदान करने में मदद करने के लिए और अधिक ठोस उदाहरण दें।