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

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

1
มีเครื่องกำเนิดทดสอบหน่วยช่วยคุณเมื่อทำงานกับรหัสเดิมหรือไม่
ฉันกำลังดูขนาดเล็ก (~ 70kLOC รวมถึงสร้าง) C # (. NET 4.0, Silverlight บางส่วน) รหัสฐานที่มีความครอบคลุมการทดสอบต่ำมาก รหัสตัวเองทำงานในที่ผ่านการทดสอบการยอมรับของผู้ใช้ แต่มันเปราะและในบางพื้นที่ไม่ได้รับปัจจัยดีมาก ฉันต้องการเพิ่มการทดสอบหน่วยที่มั่นคงรอบรหัสดั้งเดิมโดยใช้ผู้ต้องสงสัยตามปกติ (NMock, NUnit, StatLight สำหรับบิต Silverlight) วิธีการปกติของฉันคือการเริ่มทำงานในโครงการการทดสอบหน่วย & การปรับโครงสร้างใหม่จนกว่าฉันจะพอใจกับสถานะของรหัส ฉันเคยทำมาหลายครั้งแล้วและมันก็ใช้ได้ดี อย่างไรก็ตามในครั้งนี้ฉันกำลังคิดที่จะใช้ตัวสร้างการทดสอบ (โดยเฉพาะอย่างยิ่งPex ) เพื่อสร้างกรอบการทดสอบจากนั้นจึงสร้างมันออกมาด้วยตนเอง คำถามของฉันคือ: คุณเคยใช้เครื่องกำเนิดไฟฟ้าทดสอบหน่วยในอดีตเมื่อเริ่มทำงานบนฐานรหัสดั้งเดิมและถ้าเป็นเช่นนั้นคุณจะแนะนำพวกเขา? ความกลัวของฉันคือการทดสอบที่สร้างขึ้นจะพลาดความแตกต่างทางความหมายของรหัสฐานซึ่งนำไปสู่สถานการณ์ที่น่ากลัวของการทดสอบเพื่อประโยชน์ของการครอบคลุมเมตริกตันมากกว่าการทดสอบที่แสดงพฤติกรรมที่ต้องการในรหัสอย่างชัดเจน

2
“ กรอบการยืนยัน” คืออะไร?
ผมอ่านเกี่ยวกับกรอบการทดสอบหน่วย js ทดสอบขับเมื่อผมพบว่าคนที่อยู่เบื้องหลังกรอบตั้งใจที่จะบูรณาการกับกรอบการยืนยัน กรอบการยืนยันคืออะไร มันเป็นกรอบการทดสอบหน่วยหรือไม่ ถ้าเป็นกรณีเฉพาะกรอบดังกล่าวคืออะไร?

2
คุณจะทดสอบหน่วยแอปพลิเคชันและรหัส UI ได้อย่างไร
ฉันรักการเขียนการทดสอบหน่วยและยอมรับว่าพวกเขาเป็นวิธีที่ยอดเยี่ยมในการทดสอบรหัสป้องกันการถดถอย ฯลฯ อย่างไรก็ตามฉันพบว่าตัวเองไม่สามารถเขียนได้มากเท่าที่รหัสส่วนใหญ่ที่ฉันใช้ในวันและวันหยุดเป็นแอปพลิเคชัน รหัสที่แสดง UI ให้กับผู้ใช้ มีวิธีที่ดีในการทดสอบรหัสแอปพลิเคชันหน่วยหรือไม่ แนวปฏิบัติที่ดีที่สุดที่นี่มีอะไรบ้าง ฉันไม่ได้มองหาคำตอบที่เฉพาะเจาะจงเช่นกรอบงาน แต่โดยทั่วไปแล้วคุณจะเข้าถึงปัญหานี้อย่างไร

3
เป็นความคิดที่ดีหรือไม่ที่จะทำ TDD ในส่วนประกอบระดับต่ำ?
ฉันกำลังพิจารณาที่จะเขียนไดรเวอร์ระดับต่ำหรือส่วนประกอบ / เมล็ดระบบปฏิบัติการ ผู้คนosdev.orgดูเหมือนจะคิดว่าบิตที่สำคัญนั้นไม่ได้มีความหมายที่พิสูจน์ได้ด้วยวิธีนี้ แต่ฉันได้อ่านการสนทนาบางอย่างที่ผู้คนคิดแตกต่างกัน ฉันได้ดูไปรอบ ๆ แล้ว แต่ไม่พบตัวอย่างชีวิตจริงของ TDD ในองค์ประกอบระดับต่ำ นี่เป็นสิ่งที่ผู้คนทำจริง ๆ หรือเพียงแค่สิ่งที่ผู้คนพูดถึงในทางทฤษฎีเพราะไม่มีวิธีที่ดีในการฝึกฝน

3
การทดสอบหน่วยเขียนพวกเขาก่อนหรือหลังกรอบ? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว นี่เป็นคำถามแรกของฉันที่นี่ดังนั้นฉันจะทำให้มันสั้นและตรงประเด็น เมื่อเขียนการทดสอบหน่วยคุณควรเขียนก่อนหรือหลังจากที่คุณได้ทำกรอบพื้นฐานสำหรับพวกเขา? สิ่งนี้เกิดขึ้นระหว่างการสนทนาระหว่าง CEO และกรรมการผู้จัดการใหญ่ของฉันและฉันต้องการความคิดเห็นของคุณในเรื่องนี้ โดยส่วนตัวฉันมักจะเขียนรหัสก่อนแล้วจึงเขียนบททดสอบ แต่คุณล่ะ?

1
การทดสอบหน่วยสำหรับท่อส่งข้อมูลที่ประกอบด้วยฟังก์ชันหนึ่งบรรทัด
การอ่านบทนำเชิงปฏิบัติของแมรี่โรสคุกเกี่ยวกับการเขียนโปรแกรมเชิงฟังก์ชั่นเธอเป็นตัวอย่างของรูปแบบการต่อต้าน def format_bands(bands): for band in bands: band['country'] = 'Canada' band['name'] = band['name'].replace('.', '') band['name'] = band['name'].title() ตั้งแต่ ฟังก์ชั่นทำมากกว่าหนึ่งอย่าง ชื่อไม่ได้อธิบาย มันมีผลข้างเคียง ในฐานะที่เป็นโซลูชั่นที่นำเสนอเธอแนะนำให้ใช้ฟังก์ชันที่ไม่ระบุชื่อไปป์ไลน์ pipeline_each(bands, [call(lambda x: 'Canada', 'country'), call(lambda x: x.replace('.', ''), 'name'), call(str.title, 'name')]) อย่างไรก็ตามเรื่องนี้ดูเหมือนว่าฉันจะมีข้อเสียของการเป็นที่ทดสอบได้น้อยลง; อย่างน้อย format_bands อาจมีการทดสอบหน่วยเพื่อตรวจสอบว่ามันเป็นสิ่งที่มันหมายถึง แต่วิธีการทดสอบท่อ? หรือความคิดที่ว่าฟังก์ชั่นนิรนามนั้นอธิบายตนเองได้โดยที่พวกเขาไม่จำเป็นต้องทำการทดสอบ? แอปพลิเคชันที่ใช้งานจริงของฉันสำหรับสิ่งนี้กำลังพยายามทำให้pandasโค้ดของฉันทำงานได้มากกว่า ฉันมักจะมีขั้นตอนในการ "munging" def munge_data(df) df['name'] = df['name'].str.lower() df = …

2
ฉันจะทดสอบอัลกอริทึมฮิวริสติกได้อย่างไร
สมมติว่าเรามีอัลกอริทึมการค้นหาเส้นทางของเรา: def myHeuristicTSP(graph): /*implementation*/ return route ตอนนี้เราต้องการทดสอบหน่วยนี้: class TestMyHeuristicTSP: def testNullGraphRaiseValueError(self): self.assertRaises(ValueError, myHueristicTSP(None)) def testSimpleTwoNodeGraphReturnsRoute: self.assertEquals(expectedResult, myHeuristicTSP(input)) คำถามคือสำหรับอัลกอริทึม TSP ที่ไม่ใช่การแก้ปัญหาเราสามารถให้กราฟที่หลากหลายและตรวจสอบว่าพวกเขากลับเส้นทางที่สั้นที่สุดเสมอ แต่เนื่องจากอัลกอริทึมฮิวริสติกในขณะที่ยังคงสามารถกำหนดค่าได้คาดเดาได้น้อยกว่านั้นมีความหมายเพียงเพื่อให้เข้าใจว่าอัลกอริทึมนั้นใช้งานได้อย่างไรและค้นหากรณีขอบเหล่านั้นหรือไม่

4
การปรับโครงสร้างใหม่ - เหมาะสมหรือไม่ที่จะเขียนรหัสใหม่อีกครั้งตราบใดที่การทดสอบทั้งหมดผ่าน?
ฉันเพิ่งดู"ทุกสิ่งเล็ก ๆ น้อย ๆ "จาก RailsConf 2014 ในระหว่างการพูดคุยนี้ Sandi Metz refactors ฟังก์ชั่นที่รวมถึงคำสั่ง if ซ้อนขนาดใหญ่: def tick if @name != 'Aged Brie' && @name != 'Backstage passes to a TAFKAL80ETC concert' if @quality > 0 if @name != 'Sulfuras, Hand of Ragnaros' @quality -= 1 end end else ... end ... …

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

6
การทดสอบหน่วยควรครอบคลุมซอฟต์แวร์ 'ที่ใช้งานได้' เท่านั้น
เรากำลังใช้StructureMapในโครงการพัฒนาซอฟต์แวร์ใหม่ หนึ่งในสมาชิกในทีมได้ใช้การทดสอบหน่วยที่โดยทั่วไปแล้วทดสอบการกำหนดค่าคอนเทนเนอร์ของStructureMap ทำได้โดยทำสิ่งต่อไปนี้ นับจำนวนอินสแตนซ์ของแอสเซมบลีที่กำหนดค่าสำหรับคลาสใน namespace ของแอปพลิเคชันของเรา กำหนดอินสแตนซ์ที่คาดหวังในระดับชั้นเรียน ยืนยันว่าอินสแตนซ์ที่คาดหวังตรงกับอินสแตนซ์ที่พบทั้งหมด ยืนยันว่าอินสแตนซ์ที่คาดหวังตรงกับที่กำหนดไว้ในการทดสอบ ตัวอย่างของสิ่งนี้คือ; var repositories = container.GetAllInstances<IEnvironmentRepository>(); Assert.AreEqual(1, repositories .Count()); foundInstances = foundInstances + repositories .Count(); นอกจากนี้เรายังมี 'การทดสอบหน่วย' สำหรับคลาสต่อไปนี้ public MyClass(IEnvironmentRepository environmentRepository) { } ในการทดสอบเหล่านี้เราเยาะเย้ย IEnvironmentRepository ดังนั้นจะไม่ถูกฉีดจากภาชนะที่จะเกิดขึ้นในระบบสด เพื่อนร่วมงานเพิกเฉยต่อการทดสอบหน่วยในการกำหนดค่าโครงสร้างแผนผังพร้อมแสดงความคิดเห็นตามแนว "การทดสอบหน่วยเท่านั้นทดสอบการกำหนดค่าของตัวเอง" เห็นได้ชัดว่านี่คือจุดประสงค์ของการทดสอบและในความคิดของฉันก็ใช้ได้อย่างสมบูรณ์แบบ ฉันถามคนที่ไม่สนใจการทดสอบเพื่อลบการกำหนดค่าโครงสร้างแผนผังสำหรับIEnvironmentRepository(ด้วยการทดสอบยังคงถูกละเว้น) และเรียกใช้ชุดทดสอบเต็มหน่วยพวกเขาทั้งหมดผ่าน จากนั้นเราก็เรียกใช้แอปพลิเคชันและล้มลงเพราะการกำหนดค่าคอนเทนเนอร์ไม่ถูกต้อง ในความเห็นของฉันสิ่งนี้ได้พิสูจน์คุณค่าของการทดสอบแล้วเพื่อนร่วมงานของฉันยังไม่เห็นด้วย เขากล่าวเพียงว่าเราไม่ควรทำการทดสอบการกำหนดค่า แต่ฉันคิดว่านี่เป็นสิ่งที่ดีในการทดสอบหน่วย ดังนั้นคำถามมากมาย เป็นการทดสอบหน่วยที่ถูกต้อง - เรากำลังทดสอบการกำหนดค่าของคอนเทนเนอร์ของเราไม่ใช่ structuremap นั้นใช้งานได้ (แต่ฉันเห็นการทับซ้อนกัน) …

1
วิธีการจัดการการทดสอบที่ไม่ใช่หน่วยในโครงการ?
ฉันมีรหัสบางอย่างในโครงการของฉันฉันเรียกตัวเองtestsว่าไม่ใช่การทดสอบหน่วย พวกเขาตั้งใจที่จะวิ่งและผลลัพธ์จะต้องมีการประเมินโดยมนุษย์ ฉันทำสิ่งนี้เพราะฉันสร้างเครื่องยนต์ฟิสิกส์และในระหว่างการพัฒนาฉันต้องดูว่าฉันกำลังทำอะไรอยู่ ดังนั้นฉันจึงทำsimulationแพ็คเกจในโมดูลทดสอบ เป็นการทดสอบหน่วยทางเทคนิคเพราะการจำลองกำลังใช้ไลบรารีการทดสอบหน่วย แต่ฉันไม่ได้ตั้งใจที่จะเรียกใช้พวกเขาทั้งหมดเช่นการทดสอบหน่วยที่แท้จริงของฉัน สิ่งที่ฉันต้องการทำคือแยกความแตกต่างของการทดสอบพิเศษจากการทดสอบหน่วยของฉันเพราะฉันต้องการเรียกใช้การทดสอบหน่วยทั้งหมดได้อย่างง่ายดาย ฉันคิดว่ามันเหมือนกับการทดสอบเชิงหน้าที่ คุณเคยเจอกรณีที่คุณต้องเตรียมใบสมัครสำหรับการทดสอบการทำงานหรือไม่? การจัดเตรียมการทดสอบการทำงาน (โดยทั่วไปคือแบบจำลองของฉัน) อยู่ที่ไหนในโครงการและวิธีแยกแยะความแตกต่างจากการทดสอบหน่วย ฉันอยู่ใน Java ดังนั้นฉันสามารถเปลี่ยนลายเซ็นวิธีการทั้งหมดของฉันจาก@Test public void myNamedTest()เป็นpublic static void main(String[] args)แต่มันจะลำบากและเป็นประโยชน์น้อยกว่าสำหรับฉันที่จะใช้แบบจำลองของฉัน ฉันใช้junitในgradleโครงการ โซลูชันใด ๆ ที่สร้างโฟลเดอร์ทดสอบพิเศษด้วยgradleยินดีต้อนรับ

2
ฉันสามารถตรวจสอบการมีอยู่ของคำอธิบายประกอบในการทดสอบหน่วยได้หรือไม่?
ฉันมีลำดับชั้นคลาส Java ที่เกิดขึ้นจากชั้นนามธรรมและส่วนขยาย N ของมัน ในคลาส abstract ฉันมีเมธอดที่ถูกเพิ่มความคิดเห็นด้วยหมายเหตุประกอบ @Remove แม้ว่าเราจะไม่ได้รับข้อยกเว้นใด ๆ ที่จะไม่ล้มเหลวหากลบหมายเหตุนี้เราอาจได้รับการยกเว้นหน่วยความจำดังนั้นฉันจึงต้องการให้แน่ใจว่าเราสังเกตเห็นอย่างรวดเร็วที่สุดหากคำอธิบายประกอบนี้หายไปในการซ่อมแซมบางส่วน ฉันกำลังพยายามสร้าง GUTS (การทดสอบหน่วยที่ดี) ดังนั้นฉันคิดว่าฉันสามารถจัดทำเอกสาร "ข้อกำหนดทางเทคนิค" นี้ในการทดสอบของฉันพร้อมกรณีทดสอบที่ระบุไว้ แต่นี่ไม่ใช่คุณสมบัติมันเป็นรายละเอียดการใช้งานและไม่ได้เชื่อมโยงกับพฤติกรรมของวิธีการ (วิธีการอาจว่างเปล่า แต่ต้องมีอยู่และจะต้องมีคำอธิบายประกอบ) การสร้างแบบทดสอบสำหรับสิ่งนั้นหรือมีวิธีอื่นในการตรวจสอบการมีอยู่ของคำอธิบายประกอบนี้หรือไม่?

1
การทดสอบช่องว่างระหว่างหน่วยและการรวม: การรวมในการทดสอบส่วนประกอบขนาดเล็กการรวมหน่วย
ในช่วงสองสามสัปดาห์ที่ผ่านมาฉันได้ครุ่นคิดและค้นคว้าวิธีเติมช่องว่างในวิธีการทดสอบของเรา ในการทดสอบหน่วยคำศัพท์ที่ง่ายมีขนาดเล็กเกินไปและการทดสอบการรวมแบบดั้งเดิมนั้นใหญ่เกินไป สถานการณ์ที่เกิดขึ้นบ่อยครั้งที่Aและองค์ประกอบการใช้งานทั้งB Cอย่างไรก็ตามAและมีความต้องการที่แตกต่างกันเล็กน้อยและทำให้สมมติฐานแตกต่างกันเล็กน้อยเกี่ยวกับB Cหากฉันเป็นผู้พัฒนาAฉันจะทดสอบสมมติฐานของฉันได้Cอย่างไรและที่ไหน? เห็นได้ชัดว่าการทดสอบหน่วยที่Aมีข้อสมมติฐานล้อเลียนเกี่ยวกับCการทดสอบAแยกได้ แต่ก็ไม่ได้ทดสอบสมมติฐานเอง Cเป็นไปได้ก็คือการเพิ่มการทดสอบหน่วยสำหรับ อย่างไรก็ตามสิ่งนี้ไม่เหมาะเพราะในขณะที่Aอยู่ระหว่างการพัฒนาการเปลี่ยนแปลงการทดสอบCด้วยข้อสมมติฐานที่พัฒนาขึ้นจากAนั้นจะมีความเงอะงะมากเกินไป อันที่จริงAs นักพัฒนาอาจไม่ได้มีการเข้าถึงเพียงพอที่จะทดสอบหน่วยของC(เช่นห้องสมุดภายนอก) ในการจัดวางสิ่งนี้ด้วยตัวอย่างที่ชัดเจนยิ่งขึ้น: สมมติว่านี่เป็นแอปพลิเคชั่นของโหนด AและBขึ้นอยู่กับCการอ่านไฟล์ (ในหมู่สิ่งอื่น ๆ ) Cและการจัดเก็บเนื้อหาของแฟ้มในวัตถุส่งผ่านไปยัง ในตอนแรกไฟล์ทั้งหมดที่Cจัดการมีขนาดเล็กและสามารถอ่านแบบซิงโครนัสโดยไม่มีการบล็อกที่สำคัญ อย่างไรก็ตามผู้พัฒนาBตระหนักว่าไฟล์ของเขามีขนาดใหญ่ขึ้นและจำเป็นต้องเปลี่ยนCมาอ่านแบบ async ซึ่งส่งผลให้เกิดข้อผิดพลาดในการซิงโครไนซ์เป็นระยะAซึ่งยังคงCมีการอ่านไฟล์ นี่เป็นประเภทของบั๊กที่ยากต่อการติดตามจากการทดสอบการรวมระบบแบบสมบูรณ์และอาจไม่สามารถทำการทดสอบการรวมระบบได้เลย มันไม่ได้ถูกจับโดยAการทดสอบหน่วย s เพราะAข้อสันนิษฐานนั้นถูกเยาะเย้ย แต่มันได้อย่างง่ายดายจับโดย "มินิ" บูรณาการทดสอบว่าการออกกำลังกายเพียงและAC ฉันพบการอ้างอิงประเภทนี้ของการทดสอบเพียงเล็กน้อยเท่านั้น บูรณาการในขนาดเล็ก , การทดสอบส่วนประกอบของการรวม , หน่วยบูรณาการการทดสอบ นอกจากนี้ยังเกี่ยวข้องกับทิศทางการทดสอบ BDDค่อนข้างมากกว่าการทดสอบ TDD อย่างเป็นทางการ ฉันจะเติมช่องว่างการทดสอบนี้ได้อย่างไร โดยเฉพาะ - ฉันจะทำการทดสอบแบบไหน? ฉันจะจำลองอินพุตAและCสำหรับการทดสอบการรวม "มินิ" ได้อย่างไร และควรแยกความกังวลเรื่องการทดสอบระหว่างการทดสอบและการทดสอบหน่วยเท่าไหร่ หรือมีวิธีที่ดีกว่าในการเติมเต็มช่องว่างในการทดสอบ?

2
เราควรเลียนแบบเอนทิตีและวัตถุที่มีค่าเมื่อทำ DDD หรือไม่
หลังจากที่อ่านไม่กี่ บทความเกี่ยวกับnewable VS ฉีดวัตถุและวิธีการแนวความคิดเหล่านี้เกี่ยวข้องกับ DDD บริการหน่วยงานและวัตถุค่าฉันถูกทิ้งให้อยู่กับข้อสงสัยบางอย่างเกี่ยวกับการใช้ newables ในรหัสของฉันโดยเฉพาะอย่างยิ่งในการทดสอบหน่วยของฉัน ผู้สมัครหลักสำหรับ newables คือ Entities และ Value objects หมายถึงแทนที่จะฉีดการขึ้นต่อกันเหล่านี้ไปยังอ็อบเจกต์อื่นเราควรnewเป็นเพียงตัวอย่างของอ็อบเจกต์เหล่านี้และใช้มันโดยตรงในโค้ด อย่างไรก็ตามแนวปฏิบัติที่ดีของ DDD สนับสนุนการมอบหมายความรับผิดชอบให้แก่หน่วยงานและวัตถุที่มีค่าหากพวกเขาเห็นว่าเหมาะสม ดังนั้นเอนทิตีและวัตถุค่าจะสิ้นสุดลงด้วยตรรกะทางธุรกิจที่ร้ายแรงบางอย่างในนั้น ตอนนี้ถ้าบริการทำงานบนเอนทิตีหรือวัตถุที่มีค่าฉันควรล้อเลียนเอนทิตีหรือวัตถุที่มีค่าและส่งจำลองไปยังบริการ (การเยาะเย้ยจะต้องมีinterfaceสำหรับวัตถุค่าหรือหน่วยงานที่ดูเหมือนจะสนับสนุน) หรือฉันควรnewเป็นเพียงแค่เอนทิตี / ค่าวัตถุและผ่านการใช้งานที่เป็นรูปธรรมไปยังบริการและทำให้เป็นการละเมิดหลักการทดสอบหน่วยของการทดสอบเพียงหนึ่งหน่วย?

6
คุณจะทดสอบเอนโค้ดเดอร์ได้อย่างไร
ฉันมีสิ่งนี้: public byte[] EncodeMyObject(MyObject obj) ฉันได้รับการทดสอบหน่วยเช่นนี้: byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF }; Assert.IsEqual(expectedResults, EncodeMyObject(myObject)); แก้ไข: สองวิธีที่ฉันเห็นเสนอคือ: 1) การใช้ค่าที่คาดไว้ของฮาร์ดโค้ดเช่นตัวอย่างด้านบน 2) การใช้ตัวถอดรหัสเพื่อถอดรหัสอาร์เรย์ไบต์ที่เข้ารหัสและเปรียบเทียบวัตถุอินพุต / เอาต์พุต ปัญหาที่ฉันเห็นด้วยวิธีที่ 1 คือมันเปราะมากและต้องใช้ค่าฮาร์ดโค้ดจำนวนมาก ปัญหาเกี่ยวกับวิธีที่ 2 คือการทดสอบตัวเข้ารหัสขึ้นอยู่กับตัวถอดรหัสทำงานอย่างถูกต้อง หากตัวเข้ารหัส / ตัวถอดรหัสแตกเท่ากัน (ในที่เดียวกัน) การทดสอบอาจทำให้เกิดผลบวกปลอม สิ่งเหล่านี้อาจเป็นวิธีเดียวในการทดสอบวิธีการนี้ หากเป็นเช่นนั้นก็ดี ฉันถามคำถามเพื่อดูว่ามีกลยุทธ์ที่ดีกว่าสำหรับการทดสอบประเภทนี้หรือไม่ ฉันไม่สามารถเปิดเผยข้อมูลภายในของโปรแกรมเปลี่ยนไฟล์ที่ฉันกำลังทำงานได้ ฉันถามโดยทั่วไปว่าคุณจะแก้ปัญหาประเภทนี้อย่างไรและฉันไม่รู้สึกว่าภายในมีความสำคัญ สมมติว่าวัตถุอินพุตที่กำหนดจะสร้างอาร์เรย์ไบต์เอาต์พุตเดียวกันเสมอ

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