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

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

12
วิธีเขียนการทดสอบหน่วยสำหรับ Angular / TypeScript สำหรับวิธีการส่วนตัวด้วย Jasmine
คุณจะทดสอบฟังก์ชั่นส่วนตัวในเชิงมุม 2 ได้อย่างไร class FooBar { private _status: number; constructor( private foo : Bar ) { this.initFooBar(); } private initFooBar(){ this.foo.bar( "data" ); this._status = this.fooo.foo(); } public get status(){ return this._status; } } ทางออกที่ฉันพบ วางรหัสทดสอบไว้ในส่วนปิดหรือเพิ่มรหัสภายในส่วนที่ปิดซึ่งเก็บการอ้างอิงถึงตัวแปรโลคัลบนวัตถุที่มีอยู่ในขอบเขตด้านนอก ถอดแถบทดสอบออกโดยใช้เครื่องมือในภายหลัง http://philipwalton.com/articles/how-to-unit-test-private-functions-in-javascript/ โปรดแนะนำวิธีที่ดีกว่าในการแก้ปัญหานี้หากคุณทำสิ่งใดไปแล้ว? PS คำตอบส่วนใหญ่สำหรับคำถามที่คล้ายกันเช่นนี้ไม่ได้แก้ปัญหานั่นคือเหตุผลที่ฉันถามคำถามนี้ นักพัฒนาส่วนใหญ่บอกว่าคุณไม่ได้ทดสอบฟังก์ชั่นส่วนตัว แต่ฉันไม่ได้บอกว่ามันผิดหรือถูก แต่มีความจำเป็นที่เคสของฉันจะต้องทดสอบความเป็นส่วนตัว

4
ยืนยันวัตถุเป็นประเภทที่เฉพาะเจาะจง
เป็นไปได้ใน JUnit เพื่อยืนยันวัตถุเป็นตัวอย่างของชั้น? ด้วยเหตุผลหลายประการฉันมีวัตถุในการทดสอบของฉันที่ฉันต้องการตรวจสอบประเภทของ มันเป็นประเภทของ Object1 หรือชนิดของ Object2 หรือไม่? ปัจจุบันฉันมี: assertTrue(myObject instanceof Object1); assertTrue(myObject instanceof Object2); ใช้งานได้ แต่ฉันสงสัยว่ามีวิธีที่แสดงออกมากขึ้นในการทำเช่นนี้ ตัวอย่างเช่น: assertObjectIsClass(myObject, Object1); ฉันสามารถทำสิ่งนี้: assertEquals(myObject.class, Object1.getClass()); มีวิธีการยืนยันที่เฉพาะเจาะจงที่อนุญาตให้ฉันทดสอบวัตถุชนิดใดแบบหนึ่งที่ดูสง่างามกว่า
195 java  unit-testing  junit 

10
TransactionManagementError“ คุณไม่สามารถดำเนินการค้นหาจนสิ้นสุดบล็อก 'atomic'” ในขณะที่ใช้สัญญาณ แต่เฉพาะในระหว่างการทดสอบหน่วย
ฉันได้รับ TransactionManagementError เมื่อพยายามบันทึกตัวอย่างรุ่นผู้ใช้ Django และในสัญญาณหลังโพสต์บันทึกของฉันฉันบันทึกบางรุ่นที่มีผู้ใช้เป็นคีย์ต่างประเทศ บริบทและข้อผิดพลาดค่อนข้างคล้ายกับคำถามนี้ django TransactionManagementError เมื่อใช้สัญญาณ แต่ในกรณีนี้ข้อผิดพลาดเกิดขึ้นเท่านั้นในขณะที่การทดสอบหน่วย มันทำงานได้ดีในการทดสอบด้วยตนเอง แต่การทดสอบหน่วยล้มเหลว มีอะไรที่ฉันขาดหายไปไหม นี่คือตัวอย่างโค้ด: views.py @csrf_exempt def mobileRegister(request): if request.method == 'GET': response = {"error": "GET request not accepted!!"} return HttpResponse(json.dumps(response), content_type="application/json",status=500) elif request.method == 'POST': postdata = json.loads(request.body) try: # Get POST data which is to be used to …

4
การใช้วิธีการทั่วไป "any ()" ของ Mockito
ฉันมีอินเตอร์เฟซที่มีวิธีการที่คาดว่าอาร์เรย์ของFoo: public interface IBar { void doStuff(Foo[] arr); } ฉันกำลังเยาะเย้ยอินเทอร์เฟซนี้โดยใช้ Mockito และฉันต้องการยืนยันที่doStuff()เรียกว่า แต่ฉันไม่ต้องการที่จะตรวจสอบข้อโต้แย้งที่ผ่าน - "ไม่สนใจ" ฉันจะเขียนรหัสต่อไปนี้โดยใช้any()วิธีการทั่วไปได้anyObject()อย่างไร IBar bar = mock(IBar.class); ... verify(bar).doStuff((Foo[]) anyObject());

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

7
ความหมายของอาร์กิวเมนต์ epsilon ของ assertEquals สำหรับค่า double
ฉันมีคำถามเกี่ยวกับ Junit assertEqualsเพื่อทดสอบค่าสองเท่า อ่านเอกสาร API ที่ฉันเห็น: @Deprecated public static void assertEquals(double expected, double actual) เลิก ใช้ assertEquals (คาดว่าจะเป็นสองเท่า, จริงสองเท่า, epsilon สองเท่า) แทน สิ่งที่ไม่epsilonคุ้มค่าหมายถึงอะไร? (เอปไซลอนเป็นตัวอักษรในอักษรกรีกใช่มั้ย) มีคนอธิบายให้ฉันรู้ถึงวิธีการใช้
187 java  unit-testing  junit 

20
ฉันจะทดสอบรหัส Arduino ได้อย่างไร?
ฉันต้องการที่จะสามารถทดสอบโค้ด Arduino ของฉันได้ เป็นการดีที่ฉันจะสามารถเรียกใช้การทดสอบใด ๆ โดยไม่ต้องอัปโหลดรหัสไปยัง Arduino เครื่องมือหรือไลบรารีใดที่สามารถช่วยฉันได้ มีตัวจำลอง Arduino ในการพัฒนาซึ่งอาจมีประโยชน์ แต่ก็ยังไม่พร้อมที่จะใช้งาน AVR Studioจาก Atmel มีตัวจำลองชิปซึ่งอาจมีประโยชน์ แต่ฉันไม่เห็นว่าฉันจะใช้ร่วมกับ Arduino IDE ได้อย่างไร

14
การตั้งค่า HttpContext.Current.Session ในการทดสอบหน่วย
ฉันมีบริการเว็บฉันกำลังพยายามทดสอบหน่วย ในบริการมันดึงค่าหลายHttpContextอย่างเช่น: m_password = (string)HttpContext.Current.Session["CustomerId"]; m_userID = (string)HttpContext.Current.Session["CustomerUrl"]; ในการทดสอบหน่วยฉันกำลังสร้างบริบทโดยใช้คำขอผู้ปฏิบัติงานง่ายๆเช่น: SimpleWorkerRequest request = new SimpleWorkerRequest("", "", "", null, new StringWriter()); HttpContext context = new HttpContext(request); HttpContext.Current = context; อย่างไรก็ตามเมื่อใดก็ตามที่ฉันพยายามตั้งค่า HttpContext.Current.Session HttpContext.Current.Session["CustomerId"] = "customer1"; HttpContext.Current.Session["CustomerUrl"] = "customer1Url"; ฉันได้รับข้อยกเว้นอ้างอิง null ที่ระบุว่าHttpContext.Current.Sessionเป็นโมฆะ มีวิธีการเริ่มต้นเซสชันปัจจุบันในการทดสอบหน่วยหรือไม่

6
ทำไมรหัสในการทดสอบหน่วยไม่สามารถหาทรัพยากรบันเดิลได้
รหัสบางตัวฉันเป็นการทดสอบหน่วยจำเป็นต้องโหลดไฟล์ทรัพยากร มันมีบรรทัดต่อไปนี้: NSString *path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"txt"]; ในแอพมันทำงานได้ดี แต่เมื่อทำงานโดยกรอบการทดสอบหน่วยpathForResource:ส่งคืนค่าศูนย์หมายความว่ามันไม่สามารถค้นหาfoo.txtได้ ฉันแน่ใจว่าfoo.txtได้รวมอยู่ในขั้นตอนการสร้างCopy Bundle Resourcesของเป้าหมายการทดสอบหน่วยแล้วเหตุใดจึงไม่พบไฟล์

7
assertEquals vs. assertEqual ใน python
มีความแตกต่างระหว่างassertEqualsและassertEqualในหลามunittest.TestCaseหรือไม่ และถ้าไม่มีทำไมถึงมีสองฟังก์ชั่น? เพื่อความสะดวกเท่านั้น?

30
ไม่พบคลาส: ชุดทดสอบว่างใน IntelliJ
ฉันเพิ่งเริ่มโปรแกรมวิทยาการคอมพิวเตอร์ที่วิทยาลัยของฉันและฉันมีปัญหาบางอย่างกับ IntelliJ เมื่อฉันพยายามเรียกใช้การทดสอบหน่วยฉันได้รับข้อความ Process finished with exit code 1 Class not found: "edu.macalester.comp124.hw0.AreaTest"Empty test suite. ฉันเห็นข้อความชื่อ "ไม่พบการทดสอบ" ที่ด้านซ้ายของหน้าจอ รหัสทดสอบของฉันอยู่ที่นี่: package edu.macalester.comp124.hw0; import org.junit.Test; import static org.junit.Assert.*; public class AreaTest { @Test public void testSquare() { assertEquals(Area.getSquareArea(3.0), 9.0, 0.001); } @Test public void testCircle() { assertEquals(Area.getCircleArea(3.0), 28.2743, 0.001); } } และรหัสโครงการของฉันอยู่ที่นี่: …

7
วิธีเปรียบเทียบรายการในการทดสอบหน่วย
การทดสอบนี้จะล้มเหลวได้อย่างไร? [TestMethod] public void Get_Code() { var expected = new List<int>(); expected.AddRange(new [] { 100, 400, 200, 900, 2300, 1900 }); var actual = new List<int>(); actual.AddRange(new [] { 100, 400, 200, 900, 2300, 1900 }); Assert.AreEqual(expected, actual); // Assert.AreSame(expected, actual) fails // Assert.IsTrue(expected.Equals(actual)) fails }

4
การกำหนดค่า IntelliJ IDEA สำหรับการทดสอบหน่วยด้วย JUnit
ฉันตัดสินใจลองใช้ IntelliJ เมื่อเช้านี้ผ่านทางรุ่นทดลองและติดตั้งปลั๊กอิน JUnit ฉันสร้างโครงการ Java ใหม่และฉันต้องการเขียนกรณีทดสอบ ฉันจะเพิ่มไฟล์ junit.jar ไปยังโครงการของฉันได้อย่างไร (ฉันอยากจะเพิ่มเข้าไปในทุก ๆ โปรเจ็กต์ของจาวาในตอนนี้และตลอดไปมากกว่านี้ - มีวิธีการทำเช่นนั้นหรือไม่?)

7
วิธีการเข้าถึงและทดสอบฟังก์ชั่นภายใน (ไม่ใช่การส่งออก) ในโมดูล node.js?
ฉันพยายามหาวิธีการทดสอบฟังก์ชั่นภายใน (เช่นไม่ส่งออก) ใน nodejs (ควรมีมอคค่าหรือจัสมิน) และฉันก็ไม่รู้เลย! สมมติว่าฉันมีโมดูลเช่นนั้น: function exported(i) { return notExported(i) + 1; } function notExported(i) { return i*2; } exports.exported = exported; และการทดสอบต่อไปนี้ (มอคค่า): var assert = require('assert'), test = require('../modules/core/test'); describe('test', function(){ describe('#exported(i)', function(){ it('should return (i*2)+1 for any given i', function(){ assert.equal(3, test.exported(1)); assert.equal(5, test.exported(2)); }); …

13
ฉันจะรอให้บล็อกที่ส่งแบบอะซิงโครนัสเสร็จสิ้นได้อย่างไร
ฉันกำลังทดสอบโค้ดบางตัวที่ประมวลผลแบบอะซิงโครนัสโดยใช้ Grand Central Dispatch รหัสการทดสอบมีลักษณะดังนี้: [object runSomeLongOperationAndDo:^{ STAssert… }]; การทดสอบต้องรอให้การดำเนินการเสร็จสิ้น โซลูชันปัจจุบันของฉันมีลักษณะดังนี้: __block BOOL finished = NO; [object runSomeLongOperationAndDo:^{ STAssert… finished = YES; }]; while (!finished); อันไหนที่ดูค่อนข้างหยาบคุณรู้วิธีที่ดีกว่านี้ไหม? ฉันสามารถเปิดเผยคิวและบล็อกโดยโทรdispatch_sync: [object runSomeLongOperationAndDo:^{ STAssert… }]; dispatch_sync(object.queue, ^{}); ... objectแต่ที่อาจจะเปิดเผยมากเกินไปบน

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