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

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

6
ฟังก์ชั่นเยาะเย้ยในไป
ฉันกำลังเรียนรู้ไปด้วยการเข้ารหัสโปรเจ็คต์ส่วนตัวขนาดเล็ก แม้ว่ามันจะเล็ก แต่ฉันก็ตัดสินใจทำการทดสอบหน่วยอย่างเข้มงวดเพื่อเรียนรู้นิสัยที่ดีใน Go ตั้งแต่เริ่มต้น การทดสอบหน่วยเล็กน้อยได้ทั้งหมดดีและโอชะ แต่ฉันงงกับการอ้างอิงในขณะนี้ ฉันต้องการที่จะสามารถแทนที่การเรียกฟังก์ชั่นบางอย่างด้วยการจำลอง นี่คือตัวอย่างรหัสของฉัน: func get_page(url string) string { get_dl_slot(url) defer free_dl_slot(url) resp, err := http.Get(url) if err != nil { return "" } defer resp.Body.Close() contents, err := ioutil.ReadAll(resp.Body) if err != nil { return "" } return string(contents) } func downloader() { dl_slots …
147 unit-testing  mocking  go 

14
วิธีทดสอบโค้ดขึ้นอยู่กับตัวแปรสภาพแวดล้อมโดยใช้ JUnit
ฉันมีโค้ด Java ชิ้นหนึ่งซึ่งใช้ตัวแปรสภาพแวดล้อมและพฤติกรรมของโค้ดขึ้นอยู่กับค่าของตัวแปรนี้ ฉันต้องการทดสอบรหัสนี้ด้วยค่าตัวแปรสภาพแวดล้อมที่แตกต่างกัน ฉันจะทำสิ่งนี้ใน JUnit ได้อย่างไร? ฉันเคยเห็นวิธีตั้งค่าตัวแปรสภาพแวดล้อมใน Javaโดยทั่วไปแล้ว แต่ฉันสนใจด้านการทดสอบหน่วยมากกว่าโดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่าการทดสอบไม่ควรรบกวนซึ่งกันและกัน

30
การทดสอบไม่ทำงานใน Test Explorer
ฉันกำลังดำเนินการแก้ปัญหาที่มีอยู่ 32 Unittests ฉันทำงานร่วมกับนักวิ่งทดสอบ resharper - ซึ่งทำงานได้ดี การทดสอบทั้งหมดกำลังดำเนินการทดสอบทั้งหมดแสดงผลการทดสอบที่ถูกต้อง ตอนนี้เพื่อนร่วมงานบอกฉันว่าการทดสอบไม่ได้ทำงานบนเครื่องของเขาโดยใช้ Visual Studio test explorer พวกเขาไม่ทำงานบนเครื่องของฉันดังนั้นฉันจึงสามารถยกเว้นไฟล์ที่หายไปในเครื่องหรือบางอย่างได้ Test Explorer แสดงการทดสอบหน่วยทั้งหมด แต่เมื่อคลิกที่ "Run All" การทดสอบทั้งหมดจะกลายเป็นสีเทาและไม่แสดงผลการทดสอบ: ชั้นเรียนทดสอบทั้งหมดเป็นแบบสาธารณะ ชั้นเรียนทดสอบทั้งหมดมีการ[TestClass]ประกาศแอตทริบิวต์ วิธีการทดสอบทั้งหมดใช้[TestMethod]แอตทริบิวต์ ทั้งรหัสผลผลิตและโครงการทดสอบกำหนดเป้าหมายเป็น. NET 3.5 ฉันได้พยายามแล้วที่จะทำความสะอาดสร้างวิธีการแก้ปัญหาของฉันและ / หรือลบทั้งหมดobj, bin, DebugและReleaseโฟลเดอร์ ฉันจะเข้าใจคำแนะนำใด ๆ ที่อาจทำให้เกิดพฤติกรรมดังกล่าว

30
Visual Studio 2013 ไม่ค้นพบการทดสอบหน่วย
ฉันมีทางออกง่าย ๆ ใน visual studio 2013 ที่ประกอบด้วยโครงการเว็บหนึ่งโครงการห้องสมุดหนึ่งโครงการและโครงการทดสอบหน่วยหนึ่ง เมื่อฉันเปิดโซลูชันและลองเรียกใช้การทดสอบหน่วยพวกเขาจะไม่ค้นพบด้วย Visual Studio เมื่อต้องการเรียกใช้การทดสอบฉันพยายามไปที่เมนูและเลือกทดสอบ -> เรียกใช้ -> เรียกใช้การทดสอบทั้งหมดหรือโดยการเปิดหน้าต่างทดสอบ explorer โดยวิธีการที่สตูดิโอภาพไม่พบการทดสอบใด ๆ ในการแก้ปัญหา การสร้างโครงการทดสอบหน่วยง่าย ๆ ครั้งแรกและพยายามทำการทดสอบ Visual Studio รู้ว่าค้นพบการทดสอบและฉันสามารถรันได้ จากนั้นถ้าฉันเปิดโซลูชัน Visual Studio ก่อนหน้านี้ฉันจะค้นพบการทดสอบทั้งหมด ฉันพยายามบันทึกโซลูชันของฉัน แต่ปิดและเปิดใหม่โดยไม่ต้องสร้างโครงการทดสอบหน่วยแรกสตูดิโอภาพไม่พบการทดสอบอีกครั้ง นี่เป็นพฤติกรรมที่แปลกมากที่ฉันไม่รู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น ฉันเคยทำงานคนเดียวในโครงการนี้ซึ่งใช้คอมไพล์คอนโทรลที่รวมเข้ากับรากฐานทีม Visual Studio ปัญหาของ visual studio ไม่พบการทดสอบหน่วยเริ่มต้นเมื่อองค์ประกอบใหม่เข้ามาในโครงการและเมื่อฉันต้องการสร้างโซลูชันใหม่ผ่านทางแหล่งควบคุมออนไลน์ ก่อนหน้านี้การทดสอบทั้งหมดจะถูกค้นพบโดย Visual Studio เสมอ สำหรับการสร้างการทดสอบหน่วยฉันใช้ dll Microsoft.VisualStudio.QualityTools.UnitTestFramework Visual Studio รุ่นของฉันคือ: Microsoft …

5
ใช้วิธีการ NUnit Assert.Throws หรือแอตทริบิวต์ ExpectedException หรือไม่
ฉันได้ค้นพบว่าสิ่งเหล่านี้ดูเหมือนจะเป็นสองวิธีหลักในการทดสอบข้อยกเว้น: Assert.Throws<Exception>(()=>MethodThatThrows()); [ExpectedException(typeof(Exception))] ข้อใดจะดีที่สุด ข้อเสนอหนึ่งมีข้อได้เปรียบเหนือสิ่งอื่นหรือไม่? หรือมันเป็นเพียงเรื่องของการตั้งค่าส่วนตัว?

10
'โมดูลไม่ได้รับการรวบรวมสำหรับการทดสอบ' เมื่อใช้ @testable
ฉันกำลังพยายามใช้การ@testableประกาศใหม่ของ Swift 2 เพื่อแสดงชั้นเรียนของฉันไปยังเป้าหมายการทดสอบ อย่างไรก็ตามฉันได้รับข้อผิดพลาดของคอมไพเลอร์นี้: Intervalsเป็นโมดูลที่มีชั้นเรียนที่ฉันพยายามเปิดเผย ฉันจะกำจัดข้อผิดพลาดนี้ได้อย่างไร

3
มีวิธีใดที่จะแก้ไขสายลับจัสมินตามข้อโต้แย้ง?
ฉันมีฟังก์ชั่นฉันต้องการทดสอบวิธีที่เรียกว่าวิธี API ภายนอกสองครั้งโดยใช้พารามิเตอร์ที่แตกต่างกัน ฉันต้องการจำลอง API ภายนอกนี้ด้วยสายลับจัสมินและคืนสิ่งต่าง ๆ ตามพารามิเตอร์ มีวิธีใดบ้างที่จะทำเช่นนี้ในดอกมะลิ? สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือแฮ็คที่ใช้และ CallFake: var functionToTest = function() { var userName = externalApi.get('abc'); var userId = externalApi.get('123'); }; describe('my fn', function() { it('gets user name and ID', function() { spyOn(externalApi, 'get').andCallFake(function(myParam) { if (myParam == 'abc') { return 'Jane'; } else if (myParam …

11
การทดสอบเชิงมุมล้มเหลวด้วยล้มเหลวในการเรียกใช้ 'ส่ง' ใน 'XMLHttpRequest'
ฉันกำลังพยายามทดสอบองค์ประกอบเชิงมุม 4.1.0 ของฉัน - export class CellComponent implements OnInit { lines: Observable<Array<ILine>>; @Input() dep: string; @Input() embedded: boolean; @Input() dashboard: boolean; constructor( public dataService: CellService, private route: ActivatedRoute, private router: Router, private store: Store<AppStore>) { } } อย่างไรก็ตามการทดสอบ "ควรสร้าง" แบบง่ายจะทำให้เกิดข้อผิดพลาดที่เป็นความลับนี้ ... NetworkError: ล้มเหลวในการดำเนินการ 'ส่ง' ใน 'XMLHttpRequest': ล้มเหลวในการโหลด 'ng: ///DynamicTestModule/module.ngfactory.js' ดังนั้นฉันพบคำถามนี้ซึ่งแสดงให้เห็นว่าปัญหาคือองค์ประกอบมี@Input)_params …

1
Java ตรวจสอบวิธีการโมฆะเรียก n ครั้งด้วย Mockito
ฉันกำลังพยายามตรวจสอบว่ามีการเรียกเมธอด (โมฆะ) ภายใน DAO - ฉันกำลังใช้จุดคอมมิตที่ส่งรายการผลลัพธ์จนถึงจุดนั้นรีเซ็ตรายการและดำเนินการต่อ สมมติว่าฉันมี 4 สิ่งในรายการและฉันมีจุดคอมมิตเป็น 1 ฉันคาดว่าเมธอด "ส่ง" จะถูกเรียก 4 ครั้ง ฉันตรวจสอบได้ว่าเมธอดถูกเรียกเพียงครั้งเดียวโดยการเขียน Mockito.verify(mock).send() มันผ่าน .. แต่ฉันต้องการยืนยันจำนวนครั้งที่ถูกเรียก ฉันจะคิดว่า Mockito.verify(mock.send(), times(4)) จะเพียงพอ แต่กล่าวว่าพารามิเตอร์ไม่ถูกต้องสำหรับการตรวจสอบ อนึ่งถ้าฉันเปลี่ยน Mockito.verify(mock).send()ไป Mockito.verify(mock.send())หรือ Mockito.verify((mock).send())ฉันจะได้รับข้อผิดพลาดเดียวกัน ความคิดเกี่ยวกับเรื่องนี้?

7
pytest: ยืนยันเกือบเท่ากัน
จะทำอย่างไรassert almost equalกับ py.test สำหรับการลอยตัวโดยไม่ต้องหันไปใช้สิ่งที่ชอบ: assert x - 0.00001 <= y <= x + 0.00001 โดยเฉพาะอย่างยิ่งมันจะมีประโยชน์ที่จะรู้ว่าวิธีการแก้ปัญหาที่เป็นระเบียบสำหรับการเปรียบเทียบคู่ลอยอย่างรวดเร็วโดยไม่ต้องเอาออก: assert (1.32, 2.4) == i_return_tuple_of_two_floats()

6
การทดสอบคลาสนามธรรม
ฉันจะทดสอบวิธีที่เป็นรูปธรรมของคลาสนามธรรมด้วย PHPUnit ได้อย่างไร ฉันคาดหวังว่าฉันจะต้องสร้างวัตถุบางอย่างเป็นส่วนหนึ่งของการทดสอบ แม้ว่าฉันไม่ทราบวิธีปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้หรือถ้า PHPUnit อนุญาตสำหรับสิ่งนี้

4
ควรเยาะเย้ยเมื่อใด
ฉันมีความเข้าใจพื้นฐานของปลอมจำลองและวัตถุ แต่ผมไม่แน่ใจว่าผมมีความรู้สึกเกี่ยวกับเมื่อ / สถานที่ที่จะใช้เยาะเย้ย - โดยเฉพาะอย่างยิ่งมันจะนำไปใช้กับสถานการณ์นี้ที่นี่

8
จะทดสอบที่เก็บข้อมูล Spring ได้อย่างไร
ฉันต้องการพื้นที่เก็บข้อมูล (พูดUserRepository) ที่สร้างขึ้นด้วยความช่วยเหลือของ Spring Data ฉันยังใหม่กับ Spring-data (แต่ไม่ใช่ฤดูใบไม้ผลิ) และฉันใช้บทช่วยสอนนี้ ตัวเลือกของเทคโนโลยีสำหรับจัดการกับฐานข้อมูลคือ JPA 2.1 และ Hibernate ปัญหาคือฉันไม่รู้วิธีเขียนการทดสอบหน่วยสำหรับที่เก็บดังกล่าว ลองใช้create()วิธีการเช่น ในขณะที่ฉันกำลังทำการทดสอบก่อนฉันควรจะเขียนการทดสอบหน่วยสำหรับมัน - และนั่นคือสิ่งที่ฉันพบปัญหาสามประการ: ขั้นแรกฉันจะฉีดเลียนแบบEntityManagerการใช้งานUserRepositoryอินเทอร์เฟซที่ไม่มีอยู่ได้อย่างไร Spring Data จะสร้างการใช้งานตามอินเทอร์เฟซนี้: public interface UserRepository extends CrudRepository<User, Long> {} อย่างไรก็ตามฉันไม่รู้ว่าจะบังคับให้ใช้การEntityManagerจำลองและการล้อเลียนอื่น ๆ อย่างไร - ถ้าฉันเขียนการใช้งานด้วยตัวเองฉันอาจมีวิธีการตั้งค่าเพื่อEntityManagerให้ฉันใช้การจำลองสำหรับการทดสอบหน่วย (ในฐานะที่เป็นสำหรับการเชื่อมต่อฐานข้อมูลจริงฉันมีJpaConfigurationระดับกำกับด้วย@Configurationและ@EnableJpaRepositoriesที่โปรแกรมกำหนดถั่วDataSource, EntityManagerFactory, EntityManagerฯลฯ - แต่ที่เก็บควรจะทดสอบที่เป็นมิตรและอนุญาตให้มีการเอาชนะสิ่งเหล่านี้) ประการที่สองฉันควรทดสอบการโต้ตอบหรือไม่? มันยากสำหรับฉันที่จะเข้าใจว่าวิธีการใดEntityManagerและQueryควรจะเรียกว่าอะไร (คล้าย ๆ กันverify(entityManager).createNamedQuery(anyString()).getResultList();) เนื่องจากฉันไม่ใช่คนที่เขียนการนำไปใช้ ประการที่สามฉันควรจะทดสอบหน่วยวิธีการสร้างข้อมูลโดยสปริงตั้งแต่แรกหรือไม่? ดังที่ฉันทราบรหัสไลบรารีของบุคคลที่สามไม่ควรผ่านการทดสอบหน่วย - เฉพาะโค้ดที่นักพัฒนาเขียนขึ้นเองเท่านั้นที่ควรได้รับการทดสอบหน่วย …


11
ฉันจะรับ PHPUnit MockObjects เพื่อคืนค่าต่าง ๆ ตามพารามิเตอร์ได้อย่างไร
ฉันมีวัตถุจำลอง PHPUnit ที่ส่งคืน'return value'ไม่ว่าอาร์กิวเมนต์จะเป็นอย่างไร // From inside a test... $mock = $this->getMock('myObject', 'methodToMock'); $mock->expects($this->any)) ->method('methodToMock') ->will($this->returnValue('return value')); สิ่งที่ฉันต้องการจะทำคือคืนค่าที่แตกต่างกันตามอาร์กิวเมนต์ที่ส่งไปยังเมธอด mock ฉันลองทำสิ่งที่ชอบแล้ว: $mock = $this->getMock('myObject', 'methodToMock'); // methodToMock('one') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('one')) ->will($this->returnValue('method called with argument "one"')); // methodToMock('two') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('two')) ->will($this->returnValue('method called with argument "two"')); แต่สิ่งนี้ทำให้ PHPUnit บ่นหากไม่มีการจำลองด้วยอาร์กิวเมนต์'two'ดังนั้นฉันคิดว่าคำจำกัดความของการmethodToMock('two')เขียนทับคำจำกัดความของคำแรก ดังนั้นคำถามของฉันคือ: มีวิธีการรับวัตถุ PHPUnit …

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