ฉันขอแนะนำให้คุณเปลี่ยนรหัสอีกเล็กน้อย เมื่อคุณต้องเริ่มคิดถึงการใช้การไตร่ตรองหรือสิ่งอื่น ๆ เพียงแค่ทดสอบโค้ดของคุณมีบางอย่างผิดปกติกับโค้ดของคุณ
คุณพูดถึงปัญหาประเภทต่างๆ เริ่มจากฟิลด์ส่วนตัวกันก่อน ในกรณีของฟิลด์ส่วนตัวฉันจะเพิ่มตัวสร้างใหม่และฟิลด์ที่แทรกเข้าไปในนั้น แทนสิ่งนี้:
public class ClassToTest {
private final String first = "first";
private final List<String> second = new ArrayList<>();
...
}
ฉันได้ใช้สิ่งนี้:
public class ClassToTest {
private final String first;
private final List<String> second;
public ClassToTest() {
this("first", new ArrayList<>());
}
public ClassToTest(final String first, final List<String> second) {
this.first = first;
this.second = second;
}
...
}
นี่จะไม่เป็นปัญหาแม้แต่กับรหัสเดิม รหัสเก่าจะใช้ตัวสร้างที่ว่างเปล่าและถ้าคุณถามฉันรหัส refactored จะดูสะอาดตาและคุณจะสามารถฉีดค่าที่จำเป็นในการทดสอบโดยไม่มีการสะท้อนกลับ
ตอนนี้เกี่ยวกับวิธีการส่วนตัว จากประสบการณ์ส่วนตัวของฉันเมื่อคุณต้องเริ่มต้นวิธีการส่วนตัวสำหรับการทดสอบแล้ววิธีนั้นไม่มีอะไรทำในชั้นเรียนนั้น รูปแบบทั่วไปในกรณีนั้นก็คือการห่อมันไว้ในส่วนต่อประสานเช่นCallable
จากนั้นคุณก็จะผ่านไปยังส่วนต่อประสานนั้นใน Constructor (ด้วยการใช้คำสั่ง Constructor หลายตัว):
public ClassToTest() {
this(...);
}
public ClassToTest(final Callable<T> privateMethodLogic) {
this.privateMethodLogic = privateMethodLogic;
}
ส่วนใหญ่ทั้งหมดที่ฉันเขียนดูเหมือนว่ามันเป็นรูปแบบการฉีดพึ่งพา จากประสบการณ์ส่วนตัวของฉันมันมีประโยชน์จริง ๆ ในขณะที่ทำการทดสอบและฉันคิดว่ารหัสประเภทนี้สะอาดและง่ายต่อการบำรุงรักษา ฉันจะพูดแบบเดียวกันเกี่ยวกับคลาสที่ซ้อนกัน หากคลาสที่ซ้อนกันมีตรรกะหนักมันจะดีกว่าถ้าคุณย้ายมันเป็นคลาสส่วนตัวของแพ็กเกจและได้แทรกเข้าไปในคลาสที่ต้องการ
นอกจากนี้ยังมีรูปแบบการออกแบบอื่น ๆ อีกหลายรูปแบบที่ฉันใช้ในขณะทำการเปลี่ยนใหม่และการบำรุงรักษารหัสดั้งเดิม แต่ทั้งหมดขึ้นอยู่กับกรณีของรหัสของคุณที่จะทดสอบ การใช้การไตร่ตรองส่วนใหญ่ไม่ใช่ปัญหา แต่เมื่อคุณมีแอพพลิเคชั่นระดับองค์กรซึ่งได้รับการทดสอบอย่างหนักและการทดสอบจะทำงานก่อนการติดตั้งทุกครั้งทุกอย่างจะช้ามาก (มันน่ารำคาญและฉันไม่ชอบสิ่งนั้น)
นอกจากนี้ยังมีการฉีด setter แต่ฉันไม่แนะนำให้ใช้ ฉันควรติดกับนวกรรมิกและเริ่มต้นทุกอย่างเมื่อจำเป็นจริงๆโดยทิ้งความเป็นไปได้ในการฉีดการพึ่งพาที่จำเป็น