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

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

9
เร่งการทดสอบ RSpec ในแอปพลิเคชัน Rails ขนาดใหญ่
ฉันมีแอปพลิเคชัน Rails ที่มีตัวอย่างมากกว่า 2,000 ตัวอย่างในการทดสอบ RSpec ของฉัน ไม่จำเป็นต้องพูดว่ามันเป็นแอปพลิเคชั่นขนาดใหญ่และมีอะไรให้ทดสอบมากมาย การเรียกใช้การทดสอบเหล่านี้ ณ จุดนี้ไม่มีประสิทธิภาพมากและเนื่องจากใช้เวลานานมากเราจึงเกือบจะหมดกำลังใจที่จะเขียนก่อนที่จะผลักดันงานสร้างใหม่ ฉันเพิ่ม - profile ใน spec.opts ของฉันเพื่อค้นหาตัวอย่างที่ทำงานได้ยาวนานที่สุดและมีอย่างน้อย 10 ตัวที่ใช้เวลาโดยเฉลี่ย 10 วินาทีในการรัน เป็นเรื่องปกติในหมู่ผู้เชี่ยวชาญ RSpec หรือไม่? 10 วินาทีนานเกินไปสำหรับตัวอย่างเดียวหรือไม่ ฉันตระหนักดีว่าด้วยตัวอย่าง 2,000 ตัวอย่างการทดสอบทุกอย่างอย่างละเอียดจะต้องใช้เวลาไม่น้อย แต่ ณ จุดนี้ 4 ชั่วโมงเป็นเรื่องที่น่าหัวเราะเล็กน้อย คุณเห็นช่วงเวลาแบบใดสำหรับตัวอย่างที่ทำงานยาวนานที่สุด ฉันจะทำอย่างไรเพื่อแก้ปัญหาข้อกำหนดที่มีอยู่เพื่อหาปัญหาคอขวดและช่วยเร่งความเร็ว ทุกนาทีจะช่วยในจุดนี้ได้จริงๆ

8
จะบอก py.test ให้ข้ามไดเรกทอรีบางอย่างได้อย่างไร?
ฉันพยายามใช้norecursedirsตัวเลือกใน setup.cfg เพื่อบอก py.test ว่าอย่ารวบรวมการทดสอบจากไดเรกทอรีบางอย่าง แต่ดูเหมือนว่ามันจะเพิกเฉย [tool:pytest] norecursedirs=lib/third เมื่อฉันเรียกใช้py.testฉันเห็นว่ามันได้รับการทดสอบจากภายในlib/third!

2
การทดสอบหน่วย Visual Studio: SetUp และ TearDown
แทนที่จะเป็น [SetUp] และ [TearDown] ใน Nunit ทางเลือกอื่นใน Visual Studio Ultimate 2010 Unit Testing คืออะไร ในนูนิทคุณสามารถจินตนาการได้ว่าวิธีการตั้งค่าและการฉีกขาดเป็นเหมือนตัวสร้างและตัวทำลายสำหรับการทดสอบในชั้นเรียนของเรา

1
อะไรคือความแตกต่างระหว่าง `before ()` และ `beforeEach ()`?
เฉพาะสิ่งที่เป็นความแตกต่างระหว่างMocha 's before()และbeforeEach()? (คำถามเดียวกันสำหรับafter()และafterEach()) ฉันถือว่าbefore()รันหนึ่งครั้งต่อdescribe()บล็อกและbeforeEach()รันหนึ่งครั้งต่อการทดสอบ ( it()บล็อก) เป็นเช่นนั้นจริงหรือ? และเมื่อไหร่ที่ฉันจะเลือกใช้อันอื่น?

16
Enzyme - จะเข้าถึงและตั้งค่า <input> ได้อย่างไร?
ฉันสับสนเกี่ยวกับวิธีการเข้าถึงคุ้มค่าเมื่อใช้&lt;input&gt; mountนี่คือสิ่งที่ฉันได้รับจากการทดสอบของฉัน: it('cancels changes when user presses esc', done =&gt; { const wrapper = mount(&lt;EditableText defaultValue="Hello" /&gt;); const input = wrapper.find('input'); console.log(input.render().attr('value')); input.simulate('focus'); done(); }); undefinedคอนโซลพิมพ์ออก แต่ถ้าฉันแก้ไขโค้ดเล็กน้อยมันใช้งานได้: it('cancels changes when user presses esc', done =&gt; { const wrapper = render(&lt;EditableText defaultValue="Hello" /&gt;); const input = wrapper.find('input'); console.log(input.val()); input.simulate('focus'); done(); }); …

3
เพิ่ม id ใน Rid โดยทางโปรแกรม
ฉันกำลังสร้างEditTextวัตถุที่ฉันพยายามอ้างอิงในการทดสอบหน่วย อะไรคือวิธีที่ดีที่สุดที่จะเพิ่มใหม่idเพื่อR.idสำหรับวัตถุนี้สร้างขึ้นแบบไดนามิกเพื่อให้ผมมารู้ทีหลังสามารถอ้างอิงได้ผ่านทางfindViewById()ในการทดสอบหน่วย?

21
PHPUnit - 'ไม่มีการทดสอบที่ดำเนินการ' เมื่อใช้ไฟล์กำหนดค่า
ปัญหา เพื่อปรับปรุงคุณภาพของโค้ดฉันได้ตัดสินใจที่จะลองเรียนรู้วิธีทดสอบโค้ดของฉันโดยใช้การทดสอบหน่วยแทนที่จะเป็นโซลูชันการทดสอบระดับปานกลางที่ดีที่สุด ฉันตัดสินใจติดตั้ง PHPUnit โดยใช้โปรแกรมแต่งสำหรับไลบรารีส่วนตัวที่ช่วยให้ฉันสามารถใช้งานฟังก์ชันฐานข้อมูลทั่วไปได้ ตอนแรกฉันไม่มีไฟล์กำหนดค่าสำหรับ PHPUnit และเมื่อฉันรันคำสั่งเช่น: $ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest โปรดทราบว่านี่เป็นคำสั่งเทอร์มินัลดังนั้นฉันจึงไม่ได้รวม.phpส่วนขยายไว้ GeneralStringFunctionsTest ที่อ้างถึงข้างต้นเป็นGeneralStringFunctionsTest.phpไฟล์จริงๆ ผลลัพธ์คือสิ่งที่ฉันคาดหวัง: เวลา: 31 ms, หน่วยความจำ: 2.75Mb ตกลง (1 การทดสอบ 1 การยืนยัน) จากนั้นฉันพยายามใช้ไฟล์คอนฟิกูเรชันเพื่อโหลดชุดทดสอบโดยอัตโนมัติแทนที่จะต้องพิมพ์ไฟล์ด้วยตนเองทุกครั้ง ฉันสร้างไฟล์ที่เรียกว่าphpunit.xmlในไดเรกทอรีรากของฉันและป้อนสิ่งต่อไปนี้ลงในไฟล์: http://pastebin.com/0j0L4WBD : &lt;?xml version = "1.0" encoding="UTF-8" ?&gt; &lt;phpunit&gt; &lt;testsuites&gt; &lt;testsuite name="Tests"&gt; &lt;directory&gt;tests&lt;/directory&gt; &lt;/testsuite&gt; &lt;/testsuites&gt; &lt;/phpunit&gt; ตอนนี้เมื่อฉันรันคำสั่ง: phpunit ฉันได้รับผลลัพธ์ต่อไปนี้: PHPUnit 4.5.0 โดย Sebastian …

6
การจำลอง IPrincipal ใน ASP.NET Core
ฉันมีแอปพลิเคชัน ASP.NET MVC Core ที่ฉันกำลังเขียนการทดสอบหน่วย หนึ่งในวิธีการดำเนินการใช้ชื่อผู้ใช้สำหรับฟังก์ชันบางอย่าง: SettingsViewModel svm = _context.MySettings(User.Identity.Name); ซึ่งเห็นได้ชัดว่าล้มเหลวในการทดสอบหน่วย ฉันมองไปรอบ ๆ และคำแนะนำทั้งหมดมาจาก. NET 4.5 เพื่อล้อเลียน HttpContext ฉันแน่ใจว่ามีวิธีที่ดีกว่าในการทำเช่นนั้น ฉันพยายามฉีด IPrincipal แต่เกิดข้อผิดพลาด และฉันก็ลองทำเช่นนี้ (จากความสิ้นหวังฉันคิดว่า): public IActionResult Index(IPrincipal principal = null) { IPrincipal user = principal ?? User; SettingsViewModel svm = _context.MySettings(user.Identity.Name); return View(svm); } แต่สิ่งนี้ทำให้เกิดข้อผิดพลาดเช่นกัน ไม่พบสิ่งใดในเอกสารเช่นกัน ...

4
RSpec: ความแตกต่างระหว่าง let และ a before block คืออะไร?
อะไรคือความแตกต่างระหว่างletและbeforeบล็อกใน RSpec? และควรใช้เมื่อใด? แนวทางที่ดีจะเป็นอย่างไร (let หรือ before) ในตัวอย่างด้านล่างนี้? let(:user) { User.make !} let(:account) {user.account.make!} before(:each) do @user = User.make! @account = @user.account.make! end ฉันศึกษาโพสต์ stackoverflowนี้ แต่เป็นการดีหรือไม่ที่จะกำหนด let สำหรับการเชื่อมโยงเช่นด้านบน

2
อะไรคือความแตกต่างระหว่าง SpringJUnit4ClassRunner และ SpringRunner
เมื่อใดก็ตามที่ฉันเห็นบล็อกโพสต์ที่เกี่ยวข้องกับการทดสอบฤดูใบไม้ผลิฉันเห็นชั้นเรียนเหล่านี้ แต่ไม่เข้าใจความแตกต่างที่แท้จริง: @RunWith(SpringRunner.class) @RunWith(SpringJUnit4ClassRunner.class)

12
วิธีตั้งค่า googleTest เป็นไลบรารีที่ใช้ร่วมกันบน Linux
Debian ไม่มีแพ็คเกจที่คอมไพล์ไว้ล่วงหน้าสำหรับ gTest อีกต่อไป พวกเขาแนะนำให้คุณรวมกรอบงานเข้ากับ makefile ของโครงการของคุณ แต่ฉันต้องการรักษา makefile ของฉันให้สะอาด ฉันจะตั้งค่า gTest เหมือนกับเวอร์ชันก่อนหน้า (&lt;1.6.0) ได้อย่างไรเพื่อให้สามารถเชื่อมโยงกับไลบรารี

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

2
การทดสอบเชิงมุม 2 - การเรียกใช้ฟังก์ชัน Async - เมื่อจะใช้
คุณใช้ฟังก์ชัน async ในTestBedเมื่อใดเมื่อทำการทดสอบใน Angular 2 คุณใช้สิ่งนี้เมื่อใด beforeEach(() =&gt; { TestBed.configureTestingModule({ declarations: [MyModule], schemas: [NO_ERRORS_SCHEMA], }); }); และคุณใช้สิ่งนี้เมื่อใด? beforeEach(async(() =&gt; { TestBed.configureTestingModule({ declarations: [MyModule], schemas: [NO_ERRORS_SCHEMA], }); })); ใครสามารถให้ความกระจ่างฉันเกี่ยวกับเรื่องนี้?

4
การโทรกลับแบบจำลองและการรับค่าอาร์กิวเมนต์
ฉันไม่มีโชคเลยที่ได้รับ Mockito เพื่อจับค่าอาร์กิวเมนต์ของฟังก์ชัน! ฉันล้อเลียนดัชนีของเครื่องมือค้นหาและแทนที่จะสร้างดัชนีฉันแค่ใช้แฮช // Fake index for solr Hashmap&lt;Integer,Document&gt; fakeIndex; // Add a document 666 to the fakeIndex SolrIndexReader reader = Mockito.mock(SolrIndexReader.class); // Give the reader access to the fake index Mockito.when(reader.document(666)).thenReturn(document(fakeIndex(666)) ฉันไม่สามารถใช้อาร์กิวเมนต์ตามอำเภอใจได้เนื่องจากฉันกำลังทดสอบผลลัพธ์ของการสืบค้น (เช่นเอกสารที่ส่งคืน) ในทำนองเดียวกันฉันไม่ต้องการระบุค่าเฉพาะและมีบรรทัดสำหรับแต่ละเอกสาร! Mockito.when(reader.document(0)).thenReturn(document(fakeIndex(0)) Mockito.when(reader.document(1)).thenReturn(document(fakeIndex(1)) .... Mockito.when(reader.document(n)).thenReturn(document(fakeIndex(n)) ผมมองไปที่ส่วนของการเรียกกลับในการใช้ Mockitoหน้า น่าเสียดายที่มันไม่ใช่ Java และฉันไม่สามารถตีความว่ามันทำงานใน Java ได้ แก้ไข (เพื่อความชัดเจน): ฉันจะให้ …

6
ฉันจะตรวจสอบ“ ไม่มีข้อยกเว้นเกิดขึ้น” ในการทดสอบหน่วย MSTest ได้อย่างไร
ฉันกำลังเขียนการทดสอบหน่วยสำหรับวิธีการนี้ซึ่งส่งคืน "โมฆะ" ฉันต้องการมีกรณีหนึ่งที่การทดสอบจะผ่านเมื่อไม่มีการโยนข้อยกเว้น ฉันจะเขียนใน C # ได้อย่างไร Assert.IsTrue(????) (ฉันเดาว่านี่คือวิธีที่ฉันควรตรวจสอบ แต่สิ่งที่เป็น "???") ฉันหวังว่าคำถามของฉันจะชัดเจนพอ

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