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

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

2
ล้อเลียนชั้นเรียน: Mock () หรือ patch ()?
ฉันใช้การเยาะเย้ยกับ Python และสงสัยว่าสองวิธีนี้ดีกว่า (อ่าน: pythonic เพิ่มเติม) วิธีที่หนึ่ง : เพียงสร้างวัตถุจำลองและใช้สิ่งนั้น รหัสมีลักษณะดังนี้: def test_one (self): mock = Mock() mock.method.return_value = True self.sut.something(mock) # This should called mock.method and checks the result. self.assertTrue(mock.method.called) วิธีที่สอง : ใช้โปรแกรมแก้ไขเพื่อสร้างภาพจำลอง รหัสมีลักษณะดังนี้: @patch("MyClass") def test_two (self, mock): instance = mock.return_value instance.method.return_value = True self.sut.something(instance) # This should called …

14
การส่งออกข้อมูลจากการทดสอบหน่วยใน python
หากฉันกำลังเขียนการทดสอบหน่วยใน python (โดยใช้โมดูลที่ไม่เหมาะสมที่สุด) เป็นไปได้ไหมที่จะส่งออกข้อมูลจากการทดสอบที่ล้มเหลวดังนั้นฉันจึงสามารถตรวจสอบเพื่อช่วยอนุมานสิ่งที่ทำให้เกิดข้อผิดพลาดได้ ฉันตระหนักถึงความสามารถในการสร้างข้อความที่กำหนดเองซึ่งสามารถนำข้อมูลบางอย่างไปได้ แต่บางครั้งคุณอาจจัดการกับข้อมูลที่ซับซ้อนมากขึ้นซึ่งไม่สามารถแสดงเป็นสตริงได้อย่างง่ายดาย ตัวอย่างเช่นสมมติว่าคุณมีคลาส Foo และกำลังทดสอบแถบวิธีการโดยใช้ข้อมูลจากรายการที่เรียกว่า testdata: class TestBar(unittest.TestCase): def runTest(self): for t1, t2 in testdata: f = Foo(t1) self.assertEqual(f.bar(t2), 2) หากการทดสอบล้มเหลวฉันอาจต้องการเอาต์พุต t1, t2 และ / หรือ f เพื่อดูว่าเหตุใดข้อมูลนี้จึงทำให้เกิดความล้มเหลว ฉันหมายความว่าตัวแปรสามารถเข้าถึงได้เหมือนกับตัวแปรอื่น ๆ หลังจากที่รันการทดสอบแล้ว

11
วิธียืนยันเอาต์พุตด้วย nosetest / unittest ใน python
ฉันกำลังเขียนการทดสอบสำหรับฟังก์ชันต่อไปนี้: def foo(): print 'hello world!' ดังนั้นเมื่อฉันต้องการทดสอบฟังก์ชันนี้โค้ดจะเป็นดังนี้: import sys from foomodule import foo def test_foo(): foo() output = sys.stdout.getline().strip() # because stdout is an StringIO instance assert output == 'hello world!' แต่ถ้าฉันรัน nosetests ด้วยพารามิเตอร์ -s การทดสอบจะล้มเหลว ฉันจะจับเอาท์พุทด้วยโมดูลที่ไม่กระชับหรือจมูกได้อย่างไร?

5
การใช้ Spring MVC Test เพื่อทดสอบหน่วยการทดสอบหลายส่วนของคำขอ POST
ฉันมีตัวจัดการคำขอต่อไปนี้สำหรับการบันทึกรถยนต์ ฉันได้ตรวจสอบแล้วว่าใช้งานได้เมื่อฉันใช้เช่น cURL ตอนนี้ฉันต้องการทดสอบหน่วยด้วยวิธีการทดสอบ Spring MVC ฉันได้พยายามใช้ fileUploader แต่ฉันไม่ได้จัดการเพื่อให้มันใช้งานได้ ฉันไม่สามารถเพิ่มส่วน JSON ได้ ฉันจะทดสอบวิธีนี้ด้วย Spring MVC Test ได้อย่างไร ฉันไม่พบตัวอย่างใด ๆ ในเรื่องนี้ @RequestMapping(value = "autos", method = RequestMethod.POST) public ResponseEntity saveAuto( @RequestPart(value = "data") autoResource, @RequestParam(value = "files[]", required = false) List<MultipartFile> files) { // ... } ฉันต้องการอัปเดตการแสดง JSON สำหรับไฟล์อัตโนมัติ + หนึ่งไฟล์ขึ้นไป …

10
วิธีการสอดแนมบนคุณสมบัติมูลค่า (แทนที่จะเป็นวิธีการ) ด้วยจัสมิน
จัสมินspyOnเป็นสิ่งที่ดีในการเปลี่ยนพฤติกรรมของวิธีการ แต่มีวิธีใดในการเปลี่ยนคุณสมบัติค่า (แทนที่จะเป็นวิธีการ) สำหรับวัตถุหรือไม่? รหัสอาจเป็นดังนี้: spyOn(myObj, 'valueA').andReturn(1); expect(myObj.valueA).toBe(1);

11
ดำเนินการทดสอบหน่วยตามลำดับ (แทนที่จะทำแบบขนาน)
ฉันกำลังพยายามทดสอบหน่วยเครื่องมือจัดการโฮสต์ WCF ที่ฉันเขียน โดยทั่วไปเอ็นจิ้นจะสร้างอินสแตนซ์ ServiceHost ในทันทีตามการกำหนดค่า สิ่งนี้ช่วยให้เราสามารถกำหนดค่าบริการใหม่ได้แบบไดนามิกโดยไม่ต้องนำบริการทั้งหมดลงและเริ่มการทำงานใหม่เมื่อใดก็ตามที่มีการเพิ่มบริการใหม่หรือบริการเก่าถูกลบออก ฉันประสบปัญหาในการทดสอบหน่วยเครื่องมือการจัดการโฮสต์นี้อย่างไรก็ตามเนื่องจากวิธีการทำงานของ ServiceHost หากมีการสร้าง ServiceHost แล้วเปิดและยังไม่ได้ปิดสำหรับปลายทางเฉพาะจะไม่สามารถสร้าง ServiceHost อื่นสำหรับจุดสิ้นสุดเดียวกันได้ซึ่งส่งผลให้เกิดข้อยกเว้น เนื่องจากความจริงที่ว่าแพลตฟอร์มการทดสอบหน่วยที่ทันสมัยขนานกับการดำเนินการทดสอบฉันจึงไม่มีวิธีที่มีประสิทธิภาพในการทดสอบหน่วยของโค้ดนี้ ฉันใช้ xUnit.NET โดยหวังว่าเนื่องจากความสามารถในการขยายตัวของมันฉันจึงสามารถหาวิธีบังคับให้รันการทดสอบแบบอนุกรมได้ อย่างไรก็ตามฉันไม่มีโชคเลย ฉันหวังว่าใครบางคนที่นี่ใน SO พบปัญหาที่คล้ายกันและรู้วิธีรับการทดสอบหน่วยเพื่อเรียกใช้แบบอนุกรม หมายเหตุ: ServiceHostเป็นคลาส WCF ซึ่งเขียนโดย Microsoft ฉันไม่มีความสามารถที่จะเปลี่ยนพฤติกรรมได้ การโฮสต์แต่ละจุดสิ้นสุดของบริการเพียงครั้งเดียวก็เป็นพฤติกรรมที่เหมาะสมเช่นกัน ... อย่างไรก็ตามไม่ได้เอื้อต่อการทดสอบหน่วยโดยเฉพาะ

10
ทดสอบหน่วย NUnit หรือ Visual studio?
ฉันใช้ Visual Studio (บางครั้งก็มีความคมชัดมากขึ้น) เพื่อทำการทดสอบหน่วยของฉัน ฉันได้ยินเกี่ยวกับ NUnit แต่ฉันไม่รู้หลายอย่างเกี่ยวกับมัน ... ฉันควรสนใจหรือไม่ สามารถนำเสนอสิ่งที่ดีกว่า Visual Studio ได้หรือไม่? ฉันควรใช้ NUnit และทำไม?

11
จะวัดความครอบคลุมของรหัสใน Golang ได้อย่างไร?
มีใครบ้างที่ประสบความสำเร็จในการสร้างความครอบคลุมของรหัสสำหรับการทดสอบหน่วย Go? ฉันไม่พบเครื่องมือสำหรับสิ่งนั้นบนเว็บ

11
รหัสที่ซ้ำกันสามารถยอมรับได้มากกว่าในการทดสอบหน่วยหรือไม่?
ฉันได้ทำลายการทดสอบหน่วยหลายครั้งที่ผ่านมาเมื่อฉันผ่านไปและปรับโครงสร้างใหม่เพื่อให้แห้งมากขึ้น- เจตนาของการทดสอบแต่ละครั้งไม่ชัดเจนอีกต่อไป ดูเหมือนว่าจะมีการแลกเปลี่ยนระหว่างความสามารถในการอ่านและการบำรุงรักษาของการทดสอบ ถ้าฉันทิ้งรหัสที่ซ้ำกันไว้ในการทดสอบหน่วยก็จะอ่านได้ง่ายขึ้น แต่ถ้าฉันเปลี่ยนSUTฉันจะต้องติดตามและเปลี่ยนรหัสที่ซ้ำกันแต่ละชุด คุณยอมรับว่ามีการแลกเปลี่ยนนี้หรือไม่? ถ้าเป็นเช่นนั้นคุณต้องการให้การทดสอบของคุณอ่านได้หรือบำรุงรักษาได้?

8
คำสั่ง RunWith หลายรายการใน jUnit
ฉันเขียนการทดสอบหน่วยและต้องการใช้JUnitParamsRunnerและMockitoJUnitRunnerสำหรับชั้นเรียนการทดสอบเดียว ขออภัยสิ่งต่อไปนี้ใช้ไม่ได้: @RunWith(MockitoJUnitRunner.class) @RunWith(JUnitParamsRunner.class) public class DatabaseModelTest { // some tests } มีวิธีใช้ทั้ง Mockito และ JUnitParams ในคลาสทดสอบเดียวหรือไม่?
113 java  unit-testing  junit 

15
ฉันจะเขียนผลลัพธ์จากการทดสอบหน่วยได้อย่างไร
การเรียกใด ๆ ในหน่วยของฉันจะทดสอบไปที่อย่างใดอย่างหนึ่งDebug.Write(line)หรือConsole.Write(Line)เพียงแค่ข้ามไปในขณะที่ดีบักและผลลัพธ์จะไม่ถูกพิมพ์ออกมา เรียกใช้ฟังก์ชันเหล่านี้จากในชั้นเรียนฉันใช้งานได้ดี ฉันเข้าใจดีว่าการทดสอบหน่วยนั้นเป็นไปโดยอัตโนมัติ แต่ฉันก็ยังต้องการให้สามารถส่งออกข้อความจากการทดสอบหน่วยได้

2
“ ข้อผิดพลาด: ไม่มีผู้ให้บริการสำหรับเราเตอร์” ขณะเขียนกรณีทดสอบหน่วย Karma-Jasmine
เราได้ทำการตั้งค่าโครงการ angular2 หนึ่งโครงการและภายในนั้นสร้างหนึ่งโมดูล (my-module) และภายในโมดูลนั้นได้สร้างส่วนประกอบหนึ่ง (my-new-component) โดยใช้คำสั่ง cmd ต่อไปนี้: ng new angular2test cd angular2test ng g module my-module ng generate component my-new-component หลังจากสร้างการตั้งค่าและส่วนประกอบทั้งหมดเราเรียกใช้ng testคำสั่งจาก cmd ภายในโฟลเดอร์ angular2test ไฟล์ด้านล่างนี้คือไฟล์ my-new-component.component.ts ของเรา : import { Component, OnInit } from '@angular/core'; import { Router, Routes, RouterModule } from '@angular/router'; import { DummyService } …

1
QUnit vs จัสมิน? [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน7 ปีที่ผ่านมา ปรับปรุงคำถามนี้ อะไรคือความแตกต่างหลักระหว่างกรอบการทดสอบทั้งสองนี้? ฉันเป็นมือใหม่สำหรับการทดสอบการพัฒนาที่ขับเคลื่อนโดยสิ้นเชิงและเริ่มตั้งแต่ต้น

9
วิธีทดสอบ servlet ของฉันโดยใช้ JUnit
ฉันได้สร้างระบบเว็บโดยใช้ Java Servlets และตอนนี้ต้องการทำการทดสอบ JUnit ของฉันdataManagerเป็นเพียงส่วนพื้นฐานของรหัสที่ส่งไปยังฐานข้อมูล คุณจะทดสอบ Servlet กับ JUnit ได้อย่างไร ตัวอย่างรหัสของฉันที่อนุญาตให้ผู้ใช้ลงทะเบียน / สมัครซึ่งส่งมาจากหน้าหลักของฉันผ่าน AJAX: public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ // Get parameters String userName = request.getParameter("username"); String password = request.getParameter("password"); String name = request.getParameter("name"); try { // Load the database driver Class.forName("com.mysql.jdbc.Driver"); //pass reg details …

23
ฉันจะยืนยันความเท่าเทียมกันในสองคลาสโดยไม่ใช้วิธีการเท่ากับได้อย่างไร
สมมติว่าฉันมีคลาสที่ไม่มีเมธอดเท่ากับ () ซึ่งไม่มีแหล่งที่มา ฉันต้องการยืนยันความเท่าเทียมกันในสองอินสแตนซ์ของคลาสนั้น ฉันสามารถยืนยันได้หลายข้อ: assertEquals(obj1.getFieldA(), obj2.getFieldA()); assertEquals(obj1.getFieldB(), obj2.getFieldB()); assertEquals(obj1.getFieldC(), obj2.getFieldC()); ... ฉันไม่ชอบวิธีแก้ปัญหานี้เพราะฉันไม่ได้รับภาพความเท่าเทียมกันทั้งหมดหากการยืนยันในช่วงต้นล้มเหลว ฉันสามารถเปรียบเทียบด้วยตนเองและติดตามผล: String errorStr = ""; if(!obj1.getFieldA().equals(obj2.getFieldA())) { errorStr += "expected: " + obj1.getFieldA() + ", actual: " + obj2.getFieldA() + "\n"; } if(!obj1.getFieldB().equals(obj2.getFieldB())) { errorStr += "expected: " + obj1.getFieldB() + ", actual: " + obj2.getFieldB() + …
112 java  unit-testing  junit 

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