คำถามติดแท็ก junit

2
คลาสการทดสอบหน่วยที่มีฟังก์ชันการทำงานออนไลน์
เมื่อหน่วยทดสอบฟังก์ชั่นของคลาสที่มีฟังก์ชั่นส่วนตัวที่ต้องการฟังก์ชั่นออนไลน์ เราจะทดสอบมันได้ยังไง? ตัวอย่างเช่น: public class Foo { public int methodA() { int val = goOnlineToGetVal(); return val; } private int goOnlineToGetVal() { CloudService c = new CloudService(); int oval = c.getValueFromService(); return oval; } } ถ้าฉันจะทดสอบฟังก์ชั่น: 'methodA ()' มันจะพยายามใช้ 'goOnlineToGetVal ()' ซึ่งจะลองใช้งานออนไลน์อย่างไรก็ตามหากการทดสอบนี้เสร็จสิ้นโดยไม่มีการใช้งาน ฉันจะได้รับความคุ้มครองระดับ 100% โดยไม่ต้องออนไลน์ได้อย่างไร

4
จะปรับปรุงการครอบคลุมโค้ดอย่างมากได้อย่างไร?
ฉันได้รับมอบหมายให้รับแอปพลิเคชันรุ่นเก่าภายใต้การทดสอบหน่วย เริ่มจากพื้นฐานเกี่ยวกับแอปพลิเคชั่น: เป็นฐานรหัส LOC Java RCP 600k ที่มีปัญหาสำคัญเหล่านี้ การทำสำเนารหัสจำนวนมาก ไม่มีการห่อหุ้มข้อมูลส่วนตัวส่วนใหญ่สามารถเข้าถึงได้จากภายนอกข้อมูลทางธุรกิจบางส่วนยังสร้างซิงเกิลตันดังนั้นจึงไม่เพียง แต่เปลี่ยนแปลงจากภายนอก แต่ยังมาจากทุกที่ ไม่มี abstractions (เช่นไม่มีโมเดลธุรกิจข้อมูลธุรกิจถูกเก็บไว้ใน Object [] และ double [] []) ดังนั้นจึงไม่มี OO มีชุดทดสอบการถดถอยที่ดีและทีมงาน QA ที่มีประสิทธิภาพคือการทดสอบและค้นหาข้อบกพร่อง ฉันรู้เทคนิคในการทดสอบจากหนังสือคลาสสิกเช่น Michael Feathers แต่มันช้าเกินไป เนื่องจากมีระบบทดสอบการถดถอยที่ใช้งานได้ฉันจึงไม่กลัวที่จะทำการปรับโครงสร้างระบบใหม่อย่างจริงจังเพื่อให้สามารถเขียนการทดสอบหน่วยได้ ฉันจะเริ่มโจมตีปัญหาเพื่อให้ได้ความครอบคลุมได้อย่างรวดเร็วดังนั้นฉันจึงสามารถแสดงความคืบหน้าต่อการจัดการ (และอันที่จริงแล้วเริ่มมีรายได้จากความปลอดภัยของการทดสอบ JUnit) ฉันไม่ต้องการใช้เครื่องมือในการสร้างชุดทดสอบการถดถอยเช่น AgitarOne เพราะการทดสอบเหล่านี้ไม่ได้ทดสอบว่ามีบางอย่างถูกต้องหรือไม่

5
หน่วยทดสอบวิธีการโมฆะ
เพื่อแก้ไขข้อผิดพลาดในการประยุกต์ใช้ผมปรับเปลี่ยนวิธีการตั้งชื่อโดยการเพิ่มการเรียกร้องให้เป็นวิธีการที่มีอยู่ชื่อ postLogingetShoppingCart รหัส protected void postLogin() { getShoppingCart(); } อย่างไรก็ตามฉันไม่แน่ใจว่าวิธีที่ดีที่สุดในการเขียนบททดสอบpostLoginคืออะไร วิธีที่ 1 ใช้การตรวจสอบจาก Mockito เพียงตรวจสอบว่าวิธีการนั้นถูกเรียก verify(mock).getShoppingCart(); วิธีที่ 2 ทดสอบผลข้างเคียงของการเรียกใช้เมธอดโดยเรียกค่าของตะกร้าสินค้าของผู้ใช้ AssertNotNull(user.getShoppingCart()); วิธีการหนึ่งดีกว่าวิธีอื่นหรือไม่?

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

3
การเยาะเย้ยระดับคอนกรีต - ไม่แนะนำ
ฉันเพิ่งอ่านข้อความที่ตัดตอนมาจากหนังสือ "Growing Object-Oriented Software" ซึ่งอธิบายเหตุผลบางอย่างว่าทำไมไม่แนะนำให้ใช้การล้อเลียนระดับคอนกรีต นี่คือตัวอย่างโค้ดของการทดสอบหน่วยสำหรับคลาส MusicCentre: public class MusicCentreTest { @Test public void startsCdPlayerAtTimeRequested() { final MutableTime scheduledTime = new MutableTime(); CdPlayer player = new CdPlayer() { @Override public void scheduleToStartAt(Time startTime) { scheduledTime.set(startTime); } } MusicCentre centre = new MusicCentre(player); centre.startMediaAt(LATER); assertEquals(LATER, scheduledTime.get()); } } และคำอธิบายแรกของเขา: ปัญหาด้วยวิธีนี้คือมันทิ้งความสัมพันธ์ระหว่างวัตถุโดยนัย ฉันหวังว่าเราได้ทำให้ชัดเจนแล้วในตอนนี้ความตั้งใจของการพัฒนาขับเคลื่อนทดสอบกับวัตถุจำลองคือการค้นพบความสัมพันธ์ระหว่างวัตถุ …

3
เขียนหน่วยทดสอบด้วยตนเองพิสูจน์ตามตัวอย่างหรือไม่
เรารู้ว่าการเขียนการทดสอบJUnitแสดงให้เห็นถึงเส้นทางหนึ่งผ่านรหัสของคุณ หนึ่งในผู้ร่วมงานของฉันแสดงความคิดเห็น: เขียนด้วยตนเองทดสอบหน่วยเป็นหลักฐานตามตัวอย่าง เขาเป็นคนที่มาจากพื้นหลังของ Haskell ซึ่งมีเครื่องมือเช่นQuickCheckและความสามารถในเหตุผลเกี่ยวกับการทำงานของโปรแกรมประเภท ความหมายของเขาคือมีชุดค่าผสมอื่น ๆ มากมายซึ่งไม่ได้ทดสอบโดยวิธีนี้ซึ่งไม่ได้ทดสอบรหัสของคุณ คำถามของฉันคือ: เขียนหน่วยทดสอบด้วยตนเองพิสูจน์ตามตัวอย่าง?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.