คำถามติดแท็ก unit-testing

การทดสอบหน่วยเป็นวิธีการที่แต่ละหน่วยของรหัสที่มาจะถูกทดสอบเพื่อตรวจสอบว่าพวกเขาจะเหมาะสำหรับการใช้งาน

5
ควรทดสอบความซับซ้อนของอัลกอริทึมหรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
สมมติว่าฉันกำลังใช้สิ่งที่ง่ายเช่นการค้นหารายการ / แถวลำดับ ฟังก์ชั่น (ใน c #) จะมีลักษณะคล้ายกับ: static int FindIndex(int[] sortedList, int i); ฉันสามารถนำไปใช้และทดสอบสิ่งนี้ในแง่ของฟังก์ชั่น แต่ด้วยเหตุผลที่ชัดเจนฉันมักจะชอบการค้นหาแบบไบนารีมากกว่าการค้นหาเชิงเส้นหรือบางสิ่งที่โง่โดยเจตนา ดังนั้นคำถามของฉันคือ: เราควรพยายามเขียนการทดสอบที่รับประกันประสิทธิภาพในแง่ของความซับซ้อนของอัลกอริทึมและถ้าเป็นเช่นนั้นได้อย่างไร ฉันได้เริ่มสร้างข้อโต้แย้งทั้งสองด้านของ "คุณ" เป็นส่วนหนึ่งของคำถามนี้ แต่ฉันต้องการเห็นสิ่งที่ผู้คนพูดโดยไม่มีข้อโต้แย้งของฉันเพื่อกระตุ้นพวกเขา ในแง่ของ "วิธี" ที่น่าสนใจมาก :) คุณสามารถดูการกำหนดพารามิเตอร์ของตัวดำเนินการเปรียบเทียบและมีการทดสอบซึ่งตัวดำเนินการเปรียบเทียบนั้นนับการเปรียบเทียบหรืออะไรทำนองนั้น แต่เพียงเพราะคุณไม่สามารถหมายความว่าคุณควร ... มีคนอื่นที่คิดว่าสิ่งนี้ (อาจ)? ขอบคุณ

3
ความตั้งฉากของการทดสอบหน่วยเทียบกับความรัดกุมของการทดสอบหน่วย
ฉันกำลังเขียนบททดสอบสำหรับระบบบังคับเลี้ยวสำหรับวิดีโอเกม ระบบมีพฤติกรรมหลายอย่าง (หลีกเลี่ยงบริเวณนี้เนื่องจากเหตุผล A, หลีกเลี่ยงบริเวณนี้เนื่องจากเหตุผล B แต่ละคนเพิ่มบริบทเล็กน้อยลงในแผนที่ของภูมิภาคจากนั้นฟังก์ชั่นแยกต่างหากจะแยกวิเคราะห์แผนที่และสร้างการเคลื่อนไหวที่ต้องการ ฉันมีปัญหาในการตัดสินใจว่าจะเขียนบททดสอบหน่วยสำหรับพฤติกรรมอย่างไร ในฐานะที่เป็น TDD แนะนำฉันสนใจเฉพาะในพฤติกรรมที่มีผลต่อการเคลื่อนไหวที่ต้องการ ตัวอย่างเช่นการหลีกเลี่ยงเพราะเหตุผลเหตุผลควรส่งผลให้การเคลื่อนไหวอยู่ในตำแหน่งที่ไม่ดีแนะนำ ฉันไม่สนใจจริง ๆ ว่าพฤติกรรมจะเพิ่มบริบทลงในแผนที่ได้อย่างไรเพียง แต่การเคลื่อนไหวที่ต้องการอยู่ห่างจากตำแหน่ง ดังนั้นการทดสอบของฉันสำหรับแต่ละลักษณะการตั้งค่าลักษณะการทำงานทำให้มันเขียนลงในแผนที่จากนั้นดำเนินการฟังก์ชั่นการแยกแผนที่เพื่อคำนวณการเคลื่อนไหวที่ต้องการ หากการเคลื่อนไหวนั้นเป็นไปตามข้อกำหนดของฉันฉันก็มีความสุข อย่างไรก็ตามตอนนี้การทดสอบของฉันขึ้นอยู่กับทั้งพฤติกรรมที่ทำงานอย่างถูกต้องและฟังก์ชั่นการแยกวิเคราะห์แผนที่ทำงานอย่างถูกต้อง หากฟังก์ชั่นการวิเคราะห์คำล้มเหลวฉันจะได้รับการทดสอบที่ล้มเหลวหลายร้อยครั้งแทนที่จะเป็นสองสามครั้ง คู่มือการเขียนการทดสอบจำนวนมากแนะนำว่านี่เป็นความคิดที่ไม่ดี อย่างไรก็ตามถ้าฉันทดสอบโดยตรงกับผลลัพธ์ของพฤติกรรมโดยเยาะเย้ยแผนที่แล้วแน่นอนว่าฉันมีเพศสัมพันธ์กับการใช้งานแน่นเกินไป? หากฉันสามารถรับการเคลื่อนไหวที่ต้องการจากแผนที่โดยใช้พฤติกรรมที่แตกต่างกันเล็กน้อยการทดสอบก็ควรผ่าน ดังนั้นตอนนี้ฉันกำลังทุกข์ทรมานกับความไม่ลงรอยกันทางปัญญา วิธีที่ดีที่สุดในการจัดโครงสร้างการทดสอบเหล่านี้คืออะไร
14 tdd  unit-testing 

4
เมื่อใดที่ฉันควรใช้วัตถุจำลอง
ฉันได้อ่านสิ่งต่าง ๆ มากมายเกี่ยวกับ TDD แต่ฉันยังมีข้อสงสัย ตัวอย่างเช่นฉันมีไดอะแกรมคลาสเหล่านี้: มันเป็นตัวอย่างง่ายๆเพียงเพื่อเรียนรู้เกี่ยวกับ TDD และวัตถุจำลอง ฉันควรเขียนแบบทดสอบใดก่อน ผลิตภัณฑ์จากนั้นLineและสุดท้ายสั่งซื้อ ? ถ้าฉันทำเช่นนั้นฉันควรใช้LineและProductเพื่อทดสอบคำสั่งซื้อหรือฉันควรใช้ Mock Objects? เมื่อใดที่ฉันควรใช้ Mock Objects ฉันควรใช้ UML กับ XP และ TDD หรือไม่ ฉันยังไม่ได้รับสิ่งเหล่านี้

6
การทดสอบหน่วยการเขียนที่อยู่ตรงกลาง
หน่วยทดสอบเป็น 100% หรือไม่ที่ทุกประเภท? ฉันเรียกดูโปรเจคเก่าและเริ่มเพิ่มฟีเจอร์ในครั้งนี้ด้วยการทดสอบหน่วย อย่างไรก็ตามนี่เป็นสิ่งที่ไร้ค่าถ้าฉันจะกลับมาใช้ส่วนประกอบที่ผ่านมาที่ไม่มีการทดสอบหน่วยอีกครั้ง? ฉันจำเป็นต้องเขียนการทดสอบหน่วยสำหรับชั้นเรียนก่อนหน้านี้ทั้งหมดและไม่ต้องกังวลเลยหรือไม่เป็นไรที่จะเขียนเฉพาะการทดสอบหน่วยสำหรับสิ่งใหม่ที่ฉันเพิ่ม

4
หน่วยการทดสอบส่วนประกอบภายใน
คุณทำการทดสอบส่วนประกอบภายใน / ส่วนตัวของคลาส / โมดูล / แพ็คเกจ / ฯลฯ ในระดับใด คุณทดสอบพวกเขาทั้งหมดหรือคุณเพียงแค่ทดสอบส่วนต่อประสานกับโลกภายนอก? ตัวอย่างของภายในเหล่านี้เป็นวิธีการส่วนตัว ยกตัวอย่างเช่นลองนึกภาพตัวแยกวิเคราะห์แบบสืบเชื้อสายซ้ำซึ่งมีโพรซีเดอร์ภายใน (ฟังก์ชัน / เมธอด) หลายตัวที่เรียกใช้จากโพรซีเดอร์กลางเดียว อินเทอร์เฟซเดียวกับโลกภายนอกคือโพรซีเดอร์กลางซึ่งใช้สตริงและส่งคืนข้อมูลที่ถูกวิเคราะห์คำ โพรซีเดอร์อื่นแยกวิเคราะห์ส่วนต่าง ๆ ของสตริงและถูกเรียกจากโพรซีเดอร์กลางหรือโพรซีเดอร์อื่น โดยปกติคุณควรทดสอบอินเตอร์เฟสภายนอกโดยการเรียกมันด้วยสตริงตัวอย่างและเปรียบเทียบกับเอาต์พุตแยกวิเคราะห์ด้วยมือ แต่ขั้นตอนอื่น ๆ ล่ะ? คุณจะทดสอบพวกมันทีละตัวเพื่อตรวจสอบว่าพวกเขาวิเคราะห์สตริงย่อยอย่างถูกต้องหรือไม่? ฉันสามารถคิดถึงข้อโต้แย้งบางอย่าง: ข้อดี : การทดสอบเพิ่มเติมดีกว่าเสมอและสิ่งนี้สามารถช่วยเพิ่มความครอบคลุมรหัสได้ ส่วนประกอบภายในบางอย่างอาจยากที่จะให้อินพุตที่เฉพาะเจาะจง (ตัวอย่างเช่น edge edge) โดยให้อินพุตกับอินเตอร์เฟสภายนอก การทดสอบที่ชัดเจนยิ่งขึ้น หากส่วนประกอบภายในมีข้อบกพร่อง (คงที่) กรณีทดสอบสำหรับองค์ประกอบนั้นจะทำให้ชัดเจนว่าข้อผิดพลาดนั้นอยู่ในองค์ประกอบเฉพาะนั้น ข้อเสีย : การเปลี่ยนโครงสร้างจะเจ็บปวดเกินไปและใช้เวลานาน หากต้องการเปลี่ยนแปลงอะไรคุณต้องเขียนการทดสอบหน่วยใหม่แม้ว่าผู้ใช้อินเทอร์เฟซภายนอกจะไม่ได้รับผลกระทบ บางภาษาและกรอบการทดสอบไม่อนุญาต คุณมีความคิดเห็นอย่างไร?

7
การสร้างการทดสอบหน่วยบนชั้น CRUD ของแอปพลิเคชันฉันจะทำให้การทดสอบเป็นอิสระได้อย่างไร
ดังนั้นฉันจึงพยายามทำให้การทดสอบหน่วยของฉันเป็นแบบเล่มต่อไปเท่าที่จะทำได้ แต่มันจะลำบากเมื่อฉันทดสอบวิธีการเพิ่ม / ลบแบบง่าย สำหรับวิธีการเพิ่มฉันโดยทั่วไปต้องสร้างวัตถุจำลองและเพิ่มจากนั้นหลังจากการทดสอบสำเร็จฉันต้องลบวัตถุจำลอง และสำหรับการทดสอบการลบฉันต้องสร้างวัตถุจำลองเพื่อที่จะสามารถลบได้ ในขณะที่คุณสามารถดูว่าการทดสอบอย่างใดอย่างหนึ่งล้มเหลวการทดสอบอื่นจะล้มเหลวเช่นกันเพราะพวกเขาทั้งสองต้องการ เช่นเดียวกับระบบที่คุณจะต้องเขียนการทดสอบว่า "ยกเลิกคำสั่งซื้อ" ... ถ้าคุณต้องการยกเลิกการจำลองบางอย่างก่อนที่จะใช้แบบจำลองนี้จะไม่สอดคล้องกับแนวทางการทดสอบหน่วยหรือไม่ กรณีเช่นนี้หมายถึงการจัดการอย่างไร

4
เหตุใดจึงต้องใช้ phpunit เมื่อใช้การทดสอบด้วยตนเองแบบดั้งเดิม
เมื่อฉันสร้างแอปพลิเคชันเว็บฉันจะทดสอบงานของฉันบนเบราว์เซอร์เพื่อดูว่าฉันได้รับข้อผิดพลาดและแก้ไขหรือไม่ ฉันได้สร้างแอพพลิเคชั่นที่ซับซ้อนและการทดสอบด้วยวิธีนี้ง่ายและรวดเร็ว ฉันได้ดูวิดีโอมากมายบน youtube เกี่ยวกับ phpunit และไม่พบจุดประสงค์ เหตุใดห้องสมุดนี้จึงมีประโยชน์ phpunit เพิ่มเติมสำหรับ pham framworks เช่น CakePHP หรือ zend หรือไม่ ฉันไม่ได้ใช้กรอบใด ๆ เพียงแค่ core php phpunit หรือจะมีประโยชน์สำหรับฉันหรือไม่ ถ้าใช่เป็นอย่างไร นอกจากนี้ยังมี xdebug แต่ฉันไม่แน่ใจว่ามันเกี่ยวข้องหรือไม่

6
คุณจะเขียนกรณีทดสอบหน่วยได้อย่างไร
บางครั้งฉันสิ้นสุดการเขียนกรณีทดสอบหน่วยสำหรับรหัสที่นักพัฒนาคนอื่นได้เขียน มีหลายครั้งที่ฉันไม่รู้ว่านักพัฒนาพยายามทำอะไร (ส่วนธุรกิจ) และฉันเพิ่งจัดการกรณีทดสอบเพื่อรับสายสีเขียว สิ่งเหล่านี้เป็นเรื่องปกติในอุตสาหกรรมหรือไม่? แนวโน้มปกติคืออะไร? นักพัฒนาควรจะเขียนกรณีทดสอบหน่วยสำหรับรหัสที่พวกเขาเขียนเอง?

6
แต่ละวิธีควรมีคลาสทดสอบ JUnit แยกต่างหากหรือไม่?
ฉันกำลังเขียนการทดสอบหน่วย JUnit สำหรับชั้นเรียนของฉัน มันจะดีกว่าถ้ามีคลาสแยกสำหรับแต่ละวิธีหรือมีคลาสทดสอบเพียงหนึ่งสำหรับทุกคลาสจริง

4
การสอดแนมในการปฏิบัติที่ไม่ดีในชั้นเรียนทดสอบหรือไม่?
ฉันกำลังทำงานในโครงการที่การโทรภายในคลาสเป็นปกติ แต่ผลลัพธ์จะมีค่าง่าย ๆ หลายครั้ง ตัวอย่าง ( ไม่ใช่รหัสจริง ): public boolean findError(Set<Thing1> set1, Set<Thing2> set2) { if (!checkFirstCondition(set1, set2)) { return false; } if (!checkSecondCondition(set1, set2)) { return false; } return true; } การเขียนการทดสอบหน่วยสำหรับรหัสประเภทนี้นั้นยากมากเพราะฉันแค่ต้องการทดสอบระบบเงื่อนไขและไม่ได้ใช้สภาพจริง (ฉันทำอย่างนั้นในการทดสอบแยก) ในความเป็นจริงมันจะดีกว่าถ้าฉันผ่านฟังก์ชั่นที่ใช้เงื่อนไขและในการทดสอบฉันเพียงแค่ให้ล้อเลียน ปัญหาด้วยวิธีนี้คือความฮือฮาไปนี้เราจะใช้ยาชื่อสามัญมาก วิธีการทำงาน; อย่างไรก็ตามคือการทำให้วัตถุที่ทดสอบเป็นสายลับและเยาะเย้ยการเรียกไปยังฟังก์ชันภายใน systemUnderTest = Mockito.spy(systemUnderTest); doReturn(true).when(systemUnderTest).checkFirstCondition(....); ข้อกังวลที่นี่คือการใช้งาน SUT นั้นมีการเปลี่ยนแปลงอย่างมีประสิทธิภาพและอาจเป็นปัญหาในการทดสอบให้สอดคล้องกับการใช้งาน มันเป็นเรื่องจริงเหรอ? มีวิธีปฏิบัติที่ดีที่สุดในการหลีกเลี่ยงความหายนะของการเรียกใช้เมธอดภายในหรือไม่? โปรดทราบว่าเรากำลังพูดถึงบางส่วนของอัลกอริทึมดังนั้นการแบ่งออกเป็นหลายคลาสอาจไม่ใช่การตัดสินใจที่ต้องการ

1
จะทดสอบโค้ดประมวลผลภาพได้อย่างไร?
ฉันทำงานในการประมวลผลภาพ (ส่วนใหญ่เป็น OCR) และฉันสงสัยว่าฉันควรรวมการทดสอบหน่วยในการพัฒนาของฉันอย่างไร ฉันใช้การทดสอบหน่วยสำหรับรหัสประเภท "ทั่วไป" มากกว่านี้ แต่เมื่อจัดการกับรหัสการประมวลผลภาพฉันไม่แน่ใจว่าจะจัดการกับมันอย่างไร รหัสชนิดนี้ต้องการข้อมูลอินพุต / เอาท์พุตของภาพเสมอและการเยาะเย้ยสิ่งนี้ไม่ชัดเจน สำหรับตอนนี้ฉันส่วนใหญ่ทำการทดสอบการรวม แต่พวกเขาใช้เวลาสักครู่ในการทำงานและฉันต้องการความคิดเกี่ยวกับวิธีการแบ่งรหัสประเภทนี้เป็นการทดสอบหน่วยเพื่อให้ฉันสามารถเรียกใช้พวกเขาได้เร็วขึ้น แก้ไข: การวิเคราะห์ตัวละครสามารถผ่านหลายขั้นตอนที่เกี่ยวข้องกับการหมุนหลายครั้งการปรับขนาดและการทำงานของก้าน ขั้นตอนเหล่านี้เปลี่ยนแปลงบ่อยครั้งเมื่ออัลกอริทึมกำลังพัฒนา ดังนั้นอินพุทและเอาท์พุทที่คาดหวังสามารถพัฒนาได้มากในขณะทดสอบ อักขระแต่ละตัวสามารถมีขนาด 100x100 พิกเซลได้ดังนั้นจึงไม่สามารถเข้ารหัสในรหัสหรือทำงานกับข้อมูลที่สร้างขึ้นได้

7
รูปแบบกลยุทธ์สามารถดำเนินการได้โดยไม่แตกสาขาหรือไม่
รูปแบบกลยุทธ์ใช้งานได้ดีเพื่อหลีกเลี่ยงขนาดใหญ่หาก ... สร้างและทำให้ง่ายต่อการเพิ่มหรือแทนที่ฟังก์ชั่น อย่างไรก็ตามมันยังคงมีข้อบกพร่องหนึ่งในความคิดของฉัน ดูเหมือนว่าในการดำเนินการทุกครั้งยังคงต้องมีการสร้างการแยกทาง อาจเป็นไฟล์จากโรงงานหรือไฟล์ข้อมูล เป็นตัวอย่างใช้ระบบการสั่งซื้อ โรงงาน: // All of these classes implement OrderStrategy switch (orderType) { case NEW_ORDER: return new NewOrder(); case CANCELLATION: return new Cancellation(); case RETURN: return new Return(); } รหัสหลังจากนี้ไม่จำเป็นต้องกังวลและมีเพียงที่เดียวที่จะเพิ่มประเภทคำสั่งซื้อใหม่ในขณะนี้ แต่ส่วนของรหัสนี้ยังไม่สามารถขยายได้ การดึงออกมาเป็นไฟล์ข้อมูลช่วยให้อ่านง่ายขึ้น (ฉันรู้ว่าเป็นที่ถกเถียงกัน): <strategies> <order type="NEW_ORDER">com.company.NewOrder</order> <order type="CANCELLATION">com.company.Cancellation</order> <order type="RETURN">com.company.Return</order> </strategies> แต่สิ่งนี้ยังคงเพิ่มรหัสสำเร็จรูปในการประมวลผลไฟล์ข้อมูล - รับได้ง่ายขึ้นหน่วยทดสอบและรหัสที่ค่อนข้างเสถียร แต่ความซับซ้อนเพิ่มเติม …

4
คุณสามารถ TDD สำหรับข้อบกพร่องที่สามารถทดสอบได้หลังจากที่ได้รับการแก้ไขแล้วเท่านั้น?
นี่คือตัวอย่างหนึ่ง: เว็บแอปพลิเคชันของฉันมีองค์ประกอบที่สามารถลากได้ เมื่อลากองค์ประกอบเบราว์เซอร์จะสร้าง "ภาพผี" ฉันต้องการลบ "อิมเมจโกสต์" เมื่อลากแล้วเขียนการทดสอบสำหรับพฤติกรรมนี้ ปัญหาของฉันคือตอนแรกฉันไม่รู้ว่าจะแก้ไขข้อผิดพลาดนี้ได้อย่างไรและวิธีเดียวที่ฉันสามารถเขียนการทดสอบคือหลังจากที่ฉันแก้ไขแล้ว ในฟังก์ชั่นง่าย ๆ เช่นlet sum = (a, b) => a - bคุณสามารถเขียนการทดสอบว่าทำไมsum(1, 2)ไม่เท่ากัน3ก่อนที่จะเขียนโค้ดใด ๆ ในกรณีที่ฉันอธิบายฉันไม่สามารถทดสอบได้เพราะฉันไม่ทราบว่าการตรวจสอบคืออะไร (ฉันไม่รู้ว่าการยืนยันควรเป็นอย่างไร) วิธีแก้ไขปัญหาที่อธิบายคือ: let dataTransfer = e.dataTransfer let canvas = document.createElement('canvas'); canvas.style.opacity = '0'; canvas.style.position = 'absolute'; canvas.style.top = '-1000px'; dataTransfer.effectAllowed = 'none'; document.body.appendChild(canvas); dataTransfer.setDragImage(canvas, 0, 0); ฉันไม่สามารถรู้ได้ว่านี่เป็นวิธีแก้ปัญหา ฉันไม่สามารถเขียนแบบทดสอบได้หลังจากหาวิธีแก้ปัญหาออนไลน์เพราะวิธีเดียวที่ฉันจะรู้ได้ถ้ามันใช้งานได้จริงก็คือการเพิ่มรหัสนี้ลงใน …

4
ฉันจะเขียนแบบทดสอบเพื่อหาวิธีบริสุทธิ์ที่ไม่ส่งคืนสิ่งใดได้อย่างไร
ฉันมีวิชาเรียนมากมายที่จัดการกับการตรวจสอบความถูกต้องของค่า ตัวอย่างเช่นRangeValidatorคลาสจะตรวจสอบว่าค่าอยู่ในช่วงที่ระบุหรือไม่ คลาสตัวตรวจสอบความถูกต้องมีสองวิธี: is_valid(value)ซึ่งส่งคืนTrueหรือFalseขึ้นอยู่กับค่าและensure_valid(value)ตรวจสอบค่าที่ระบุและไม่ทำอะไรเลยถ้าค่านั้นถูกต้องหรือส่งข้อยกเว้นเฉพาะถ้าค่าไม่ตรงกับกฎที่กำหนดไว้ล่วงหน้า ขณะนี้มีการทดสอบสองหน่วยที่เกี่ยวข้องกับวิธีนี้: สิ่งที่ผ่านค่าที่ไม่ถูกต้องและทำให้แน่ใจว่ามีข้อผิดพลาดเกิดขึ้น def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5) สิ่งที่ผ่านค่าที่ถูกต้อง def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25) แม้ว่าการทดสอบครั้งที่สองจะทำงาน - ล้มเหลวหากมีการโยนข้อยกเว้นและประสบความสำเร็จหากensure_validไม่ได้โยนอะไรเลย - ความจริงที่ว่าไม่มีสิ่งใดassertอยู่ข้างในดูแปลก คนที่อ่านรหัสดังกล่าวจะถามตัวเองทันทีว่าทำไมมีการทดสอบซึ่งดูเหมือนว่าไม่ได้ทำอะไรเลย นี่เป็นแนวปฏิบัติในปัจจุบันเมื่อทดสอบวิธีที่ไม่ส่งคืนค่าและไม่มีผลข้างเคียงหรือไม่ หรือฉันควรจะเขียนการทดสอบในวิธีที่ต่างออกไป? หรือเพียงแค่ใส่ความคิดเห็นอธิบายสิ่งที่ฉันทำ

2
จะไปเกี่ยวกับการทดสอบรหัสยกเลิกการฉีดได้อย่างไร
ดังนั้นฉันจึงมีรหัสชิ้นส่วนต่อไปนี้ที่ใช้งานได้ทั่วระบบของฉัน ขณะนี้เรากำลังเขียนการทดสอบหน่วยย้อนหลัง (ดีกว่าไม่เป็นอาร์กิวเมนต์ของฉัน) แต่ฉันไม่เห็นว่าสิ่งนี้จะทดสอบได้อย่างไร public function validate($value, Constraint $constraint) { $searchEntity = EmailAlertToSearchAdapter::adapt($value); $queryBuilder = SearcherFactory::getSearchDirector($searchEntity->getKeywords()); $adapter = new SearchEntityToQueryAdapter($queryBuilder, $searchEntity); $query = $adapter->setupBuilder()->build(); $totalCount = $this->advertType->count($query); if ($totalCount >= self::MAXIMUM_MATCHING_ADS) { $this->context->addViolation( $constraint->message ); } } แนวคิดนี้ควรใช้ได้กับทุกภาษา แต่ฉันใช้ PHP รหัสจะสร้างวัตถุแบบสอบถาม ElasticSearch โดยยึดตามSearchวัตถุซึ่งจะถูกสร้างขึ้นจากEmailAlertวัตถุ สิ่งเหล่านี้SearchและEmailAlertเป็นเพียงของ POPO ปัญหาของฉันที่ฉันไม่เห็นว่าฉันสามารถเยาะเย้ยออกSearcherFactory(ซึ่งใช้วิธีการคง) หรือSearchEntityToQueryAdapterที่ต้องการผลที่ได้จากSearcherFactory::getSearchDirector และSearchอินสแตนซ์ ฉันจะฉีดสิ่งที่สร้างขึ้นจากผลลัพธ์ภายในวิธีการได้อย่างไร อาจมีรูปแบบการออกแบบบางอย่างที่ฉันไม่ทราบ? …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.