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

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

9
Mockito ตรวจสอบข้อโต้แย้งวิธี
ฉัน googled เกี่ยวกับเรื่องนี้ แต่ไม่พบสิ่งที่เกี่ยวข้อง ฉันมีสิ่งนี้: Object obj = getObject(); Mockeable mock= Mockito.mock(Mockeable.class); Mockito.when(mock.mymethod(obj )).thenReturn(null); Testeable testableObj = new Testeable(); testableObj.setMockeable(mock); command.runtestmethod(); ตอนนี้ฉันต้องการตรวจสอบว่าmymethod(Object o)สิ่งที่เรียกว่าภายในruntestmethod()ถูกเรียกด้วยวัตถุoไม่ใช่อย่างอื่น แต่ฉันมักจะผ่านการทดสอบสิ่งที่ฉันใส่ในการตรวจสอบตัวอย่างเช่นด้วย: Mockito.verify(mock.mymethod(Mockito.eq(obj))); หรือ Mockito.verify(mock.mymethod(Mockito.eq(null))); หรือ Mockito.verify(mock.mymethod(Mockito.eq("something_else"))); ฉันผ่านการทดสอบเสมอ ฉันจะทำการยืนยันให้สำเร็จได้อย่างไร (ถ้าเป็นไปได้) ขอบคุณ.


30
ไม่พบการทดสอบหน่วยใน Visual Studio 2017
ฉันดิ้นรนกับ VS 2017 ตั้งแต่ฉันติดตั้ง ตอนนี้ดูเหมือนว่าการทดสอบหน่วยจะเรียกใช้จากบรรทัดคำสั่ง "การทดสอบ dotnet" เท่านั้น โครงการของฉันคือ. NET Core 1.1.1 ฉันมี SDK และการอัพเดตเฟรมเวิร์กสำหรับ 1.1.1 ที่ติดตั้ง ฉันได้ลองตัวอย่างที่ MSDN ( https://msdn.microsoft.com/en-us/library/ms182532.aspx ) ซึ่งก็ล้มเหลวเหมือนกันทุกประการ แพ็คเกจ NuGet ทั้งหมดสำหรับการทดสอบและโครงการหลักเป็นปัจจุบัน และทั้งโครงการทดสอบและโครงการหลักที่สร้างขึ้นโดยไม่มีข้อผิดพลาด การทดสอบรันได้สำเร็จจากบรรทัดคำสั่ง มีใครได้รับการทดสอบหน่วยที่จะทำงานใน VS 2017 ถ้าเป็นเช่นนั้นได้อย่างไร ขอบคุณ John อัปเดต - ขยาย นี่คือตัวอย่างของโครงการทดสอบอย่างง่ายที่ไม่ได้ทำงานบนGitHub นี่คือตัวอย่างของ xUnit แต่ฉันลองใช้ NUnit และ visual studio ที่สร้างขึ้นในการทดสอบ MS ไม่ว่าฉันจะทำการทดสอบอะไรหรือเปลี่ยนแปลงอะไรฉันก็ไม่สามารถรับ VS test …

11
ใช้ Mockito เพื่อทดสอบคลาสนามธรรม
ฉันต้องการทดสอบคลาสนามธรรม แน่นอนว่าฉันสามารถเขียนจำลองที่สืบทอดมาจากคลาสได้ด้วยตนเอง ฉันสามารถทำสิ่งนี้โดยใช้กรอบการเยาะเย้ย (ฉันใช้ Mockito) แทนการประดิษฐ์จำลองด้วยมือของฉันได้หรือไม่? อย่างไร?

15
การทดสอบหน่วยเชิงมุม 2: ไม่พบชื่อ 'อธิบาย'
ฉันกำลังติดตามการสอนนี้จาก angular.io ดังที่พวกเขากล่าวว่าฉันได้สร้างไฟล์ hero.spec.ts เพื่อสร้างการทดสอบหน่วย: import { Hero } from './hero'; describe('Hero', () => { it('has name', () => { let hero: Hero = {id: 1, name: 'Super Cat'}; expect(hero.name).toEqual('Super Cat'); }); it('has id', () => { let hero: Hero = {id: 1, name: 'Super Cat'}; expect(hero.id).toEqual(1); }); }); การทดสอบหน่วยทำงานเหมือนมีเสน่ห์ …

20
การทดสอบหน่วยคืออะไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน12 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ ฉันเห็นคำถามมากมายถามว่า 'วิธี' การทดสอบหน่วยในภาษาเฉพาะ แต่ไม่มีคำถามถามว่า 'อะไร', 'ทำไม' และ 'เมื่อ' มันคืออะไร? มันทำอะไรให้ฉัน เหตุใดฉันจึงควรใช้ ฉันควรใช้เมื่อใด (เมื่อใด) ข้อผิดพลาดและความเข้าใจผิดที่พบบ่อยคืออะไร

4
Mockito ยืนยันการสั่งซื้อ / ลำดับของการเรียกเมธอด
มีวิธีการตรวจสอบว่ามีการmethodOneเรียกมาก่อนmethodTwoใน Mockito หรือไม่? public class ServiceClassA { public void methodOne(){} } public class ServiceClassB { public void methodTwo(){} } public class TestClass { public void method(){ ServiceClassA serviceA = new ServiceClassA(); ServiceClassB serviceB = new ServiceClassB(); serviceA.methodOne(); serviceB.methodTwo(); } }

16
วิธีใช้ JUnit เพื่อทดสอบกระบวนการแบบอะซิงโครนัส
คุณจะทดสอบวิธีที่ใช้กระบวนการแบบอะซิงโครนัสกับ JUnit ได้อย่างไร ฉันไม่ทราบวิธีที่จะทำให้การทดสอบของฉันรอให้กระบวนการสิ้นสุด (ไม่ใช่การทดสอบหน่วยอย่างแน่นอนมันเป็นเหมือนการทดสอบการรวมเข้าด้วยกันเนื่องจากมันเกี่ยวข้องกับหลายคลาสและไม่ใช่แค่หนึ่งคลาส)

30
หน่วยทดสอบแคตตาล็อกรูปแบบการต่อต้าน
ล็อคแล้ว คำถามและคำตอบของคำถามนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ anti-pattern : ต้องมีองค์ประกอบสำคัญอย่างน้อยสองอย่างในปัจจุบันที่จะแยกแยะรูปแบบการต่อต้านที่แท้จริงจากนิสัยที่ไม่ดีแบบง่าย ๆ การฝึกฝนที่ไม่ดีหรือความคิดที่ไม่ดี: รูปแบบของการกระทำกระบวนการหรือโครงสร้างซ้ำ ๆ บางอย่างที่เริ่มปรากฏว่ามีประโยชน์ แต่ในท้ายที่สุดก่อให้เกิดผลกระทบที่เลวร้ายยิ่งกว่าผลลัพธ์ที่เป็นประโยชน์และ โซลูชันที่ได้รับการปรับโครงสร้างใหม่ซึ่งมีการบันทึกไว้อย่างชัดเจนได้รับการพิสูจน์ในการปฏิบัติจริงและสามารถทำซ้ำได้ โหวตให้กับรูปแบบการต่อต้าน TDD ที่คุณเคยเห็น "ในป่า" หนึ่งครั้งมากเกินไป โพสต์บล็อกโดยเจมส์คาร์และ การสนทนาที่เกี่ยวข้องกับการพัฒนาทดสอบกลุ่ม yahoogroup หากคุณพบหนึ่ง 'ไม่มีชื่อ' .. โพสต์ 'em เกินไป โพสต์ต่อการต่อต้านแบบหนึ่งโปรดให้คะแนนโหวตบางสิ่ง ความสนใจของฉันคือการหาเซตย่อยอันดับต้น ๆ เพื่อที่ฉันจะได้พูดคุยกับพวกเขาในกล่องอาหารกลางวันที่จะพบกันในอนาคตอันใกล้

7
ข้อตกลงการตั้งชื่อยอดนิยมสำหรับการทดสอบหน่วยมีอะไรบ้าง [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ทั่วไป ปฏิบัติตามมาตรฐานเดียวกันสำหรับการทดสอบทั้งหมด ชัดเจนเกี่ยวกับสถานะการทดสอบแต่ละครั้ง มีความเฉพาะเจาะจงเกี่ยวกับพฤติกรรมที่คาดหวัง ตัวอย่าง 1) MethodName_StateUnderTest_ExpectedBehavior Public void Sum_NegativeNumberAs1stParam_ExceptionThrown() Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown () Public void Sum_simpleValues_Calculated () ที่มา: การตั้งชื่อมาตรฐานสำหรับการทดสอบหน่วย 2) การแยกแต่ละคำด้วยการขีดเส้นใต้ Public void Sum_Negative_Number_As_1st_Param_Exception_Thrown() Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown () Public void Sum_Simple_Values_Calculated () อื่น ๆ สิ้นสุดชื่อวิธีด้วยการทดสอบ เริ่มต้นชื่อเมธอดพร้อมชื่อคลาส

5
จะบอกวัตถุจำลอง Mockito ให้คืนสิ่งที่แตกต่างในครั้งต่อไปที่เรียกได้อย่างไร
ดังนั้นฉันกำลังสร้างวัตถุจำลองเป็นตัวแปรแบบคงที่ในระดับชั้นเช่นนี้ ... ในการทดสอบหนึ่งฉันต้องการFoo.someMethod()คืนค่าบางค่าในขณะที่การทดสอบอื่นฉันต้องการให้คืนค่าที่แตกต่างกัน ปัญหาที่ฉันมีคือดูเหมือนว่าฉันต้องสร้าง mocks ขึ้นใหม่เพื่อให้ทำงานได้อย่างถูกต้อง ฉันต้องการหลีกเลี่ยงการสร้าง mocks ขึ้นใหม่และใช้วัตถุเดียวกันในการทดสอบแต่ละครั้ง class TestClass { private static Foo mockFoo; @BeforeClass public static void setUp() { mockFoo = mock(Foo.class); } @Test public void test1() { when(mockFoo.someMethod()).thenReturn(0); TestObject testObj = new TestObject(mockFoo); testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value } @Test public void …

6
เมื่อใดที่จะใช้ Mockito.verify ()
ฉันเขียนกรณีทดสอบ jUnit สำหรับ 3 จุดประสงค์: เพื่อให้แน่ใจว่ารหัสของฉันเป็นไปตามฟังก์ชันการทำงานที่จำเป็นทั้งหมดภายใต้การรวมกัน / ค่า (หรือส่วนใหญ่) ของอินพุต เพื่อให้แน่ใจว่าฉันสามารถเปลี่ยนแปลงการใช้งานและพึ่งพากรณีทดสอบ JUnit เพื่อบอกฉันว่าการทำงานทั้งหมดของฉันยังคงเป็นที่น่าพอใจ เป็นเอกสารประกอบการใช้งานทุกกรณีรหัสของฉันจัดการและทำหน้าที่เป็นข้อมูลจำเพาะสำหรับการปรับโครงสร้างใหม่ - หากรหัสจำเป็นต้องถูกเขียนใหม่ (ปรับเปลี่ยนรหัสและหากการทดสอบ jUnit ของฉันล้มเหลว - คุณอาจพลาดกรณีการใช้งานบางอย่าง) ฉันไม่เข้าใจว่าทำไมหรือMockito.verify()ควรใช้ เมื่อฉันเห็นverify()การถูกเรียกมันกำลังบอกฉันว่า jUnit ของฉันเริ่มตระหนักถึงการใช้งาน (ดังนั้นการเปลี่ยนการใช้งานของฉันจะทำลาย jUnits ของฉันแม้ว่าการทำงานของฉันจะไม่ได้รับผลกระทบ) ฉันกำลังหา: สิ่งที่ควรเป็นแนวทางสำหรับการใช้งานที่เหมาะสมของMockito.verify()? เป็นพื้นฐานที่ถูกต้องหรือไม่ที่ jUnits จะต้องตระหนักถึงหรือใช้ควบคู่กับการทดสอบในชั้นเรียนอย่างรัดกุมหรือไม่?

16
Java: วิธีทดสอบวิธีที่เรียกว่า System.exit ()
ฉันมีวิธีการสองสามอย่างที่ควรเรียกใช้System.exit()ในอินพุตบางตัว น่าเสียดายที่การทดสอบกรณีเหล่านี้ทำให้ JUnit สิ้นสุดลง! การวางการเรียกเมธอดในเธรดใหม่ดูเหมือนจะไม่ช่วยได้เนื่องจากSystem.exit()ยกเลิก JVM ไม่ใช่เฉพาะเธรดปัจจุบัน มีรูปแบบทั่วไปในการจัดการกับเรื่องนี้หรือไม่? ตัวอย่างเช่นผมสามารถ Subsitute ต้นขั้วหาSystem.exit()? [แก้ไข] ชั้นเรียนที่สงสัยเป็นเครื่องมือบรรทัดคำสั่งที่ฉันพยายามทดสอบภายใน JUnit บางที JUnit ไม่ใช่เครื่องมือที่เหมาะสมสำหรับงานใช่ไหม ข้อเสนอแนะสำหรับเครื่องมือทดสอบการถดถอยเสริมนั้นยินดีต้อนรับ (โดยเฉพาะสิ่งที่รวมเข้ากับ JUnit และ EclEmma ได้ดี)

10
แทนที่การตั้งค่าเริ่มต้น Spring-Boot application.properties ใน Junit Test
ฉันมีแอปพลิเคชัน Spring-Boot ซึ่งคุณสมบัติเริ่มต้นถูกตั้งค่าในapplication.propertiesไฟล์ใน classpath (src / main / resources / application.properties) ฉันต้องการแทนที่การตั้งค่าเริ่มต้นบางอย่างในการทดสอบ JUnit ด้วยคุณสมบัติที่ประกาศในtest.propertiesไฟล์ (src / test / resources / test.properties) ฉันปกติมีชั้นเรียนเฉพาะสำหรับการทดสอบ Junit ของฉันเช่น package foo.bar.test; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import(CoreConfig.class) @EnableAutoConfiguration public class TestConfig { } ฉันแรกคิดว่าการใช้@PropertySource("classpath:test.properties")ในคลาส TestConfig จะทำเคล็ดลับ แต่คุณสมบัติเหล่านี้จะไม่เขียนทับการตั้งค่า application.properties (ดูเอกสารอ้างอิง Spring-Boot เอกสารอ้างอิง - 23. …

5
Mockito - ความแตกต่างระหว่าง doReturn () และเมื่อ ()
ขณะนี้ฉันกำลังใช้ Mockito เพื่อจำลองวัตถุชั้นบริการของฉันในแอปพลิเคชัน Spring MVC ซึ่งฉันต้องการทดสอบวิธีการควบคุมของฉัน อย่างไรก็ตามในขณะที่ฉันได้รับการอ่านบนเฉพาะของ Mockito ที่ฉันได้พบว่าวิธีการที่จะเทียบเท่ากับdoReturn(...).when(...) when(...).thenReturn(...)ดังนั้นคำถามของฉันคืออะไรที่มีสองวิธีที่ทำสิ่งเดียวกันหรืออะไรคือความแตกต่างที่ลึกซึ้งระหว่างdoReturn(...).when(...)และwhen(...).thenReturn(...)? ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม

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