ฉันควรจะใช้กับตัวแปร throught ทั้งหมดหน่วยทดสอบเลือดอะไรนี่หรอก

0

คำถาม

ฉันกำลังสร้างหน่วยในการทดสอบของจาวาและสำหรับแต่ละวิธีการผสร้างเหมือนกันรายชื่อตัวแปรเป็นต้น ที่อยู่อีกมือแน่นอนฉันคิดว่าฉันจะสามารถสร้างพวกนี้ตัวแปรเป็นโกลบอลและตั้งค่าของพวกเขาอยู่ใน setup() วิธีการ(ใน @Before)แต่ฉันไม่แน่ใจว่าค่าอาจจะเปลี่ยนไปตอนที่กำลังทำการทดสอบเนื่องจาก multithreading เป็นต้น ดังนั้นอะไรคือวิธีที่ดีที่สุดสำหรับสถานการณ์นี้?

java junit junit5 testing
2021-11-23 13:33:22
1

คำตอบที่ดีที่สุด

2

ไม่มีอะไรต้องกังวลหรอก JUnit จะสร้างใหม่ตัวอย่างของคุณทดสอบชั้นเรียนและจากนั้นก็วิ่งหนีกัน @Before วิธีการและหลังจากนั้นขึ้นอยู่กับหนีคน @Test วิธีการและนั่นมันเพลงและเต้นประจำวันอีกครั้ง สำหรับทุก @Test annotated วิธีการอยู่ในห้องเรียน. คุณกำลังใช้ @Before เหมือนกับที่มันเป็นแรง:มันคือสำหรับจัดเก็บ initialization รหัสนั่นต้องการสำหรับการทดลองตรวจสอบในทดสอบห้องเรียน

JUnit มันแบบนี้เพราะ'ทดสอบอิสรภาพ'เป็นต้อง:การทดสอบโดยเฉพาะ,ผิดพลาดหรือผ่านอิสระของคนกำลังจะออกคำสั่งที่คุณเรียกประมวลผลพวกเขา

ทุกดังนั้นบ่อยครั้ง init คือโพรเซสดังนั้นแพงนั่นมันไม่คุ้มค่ามันต้องจ่ายค่า'ค่า'ของวิ่งมันซ้ำแล้วซ้ำอีกครั้งสำหรับทุกการทดสอบ หมายเหตุกำกับ @BeforeClass อยู่ก่อนโดยเฉพาะสำหรับ มัน เป้าหมาย คนของเอกสารจาวา(javadoc)language @BeforeClass แม้แต่คาถาออกที่นี่ข้อตกลงนั้นทดสอบอิสรภาพและควรเพราะฉะนั้นคงจะถูกใช้หากตั้งค่างานคุณทำอย่างภายในช่างเป็นวิธีการเป็นที่พัฒนาอย่างเหมาะสแพง(computationally หรือไม่เช่นนั้น)เพื่อให้มัน tradeoff.

หรือจะพูดอีกอย่าง:

คุณเป็นห่วงทดสอบอิสรภาพเป็นจริงแต่พวกเขาจะปรับใช้ @BeforeClass. @Before ไม่ทรมานจากปัญหานี้;โค้ดนั่นคืออีกครั้สำหรับทุกการทดสอบ

NB:คุณสามารถโยนทั้งหมดนี่ออกไปนอกหน้าต่างถ้าคุณมี static เกิดเรื่องอะไรนิดหน่อย ไม่มีรูปแบบของในรทดสอบรหัสถ้าคุณรู้ว่าสิ่งที่คุณกำลังทำอะไรอยู่ ฉันเดาว่าคุณไม่มีมันในกรณีนั้น-ทำดีต่อไปของคุณการทดสอบการเป็นอิสระ.

2021-11-23 13:38:26

ขอบคุณมาก,พตัวอย่างเช่นรหัสนั่นแสดงที่เหมาะสมการใช้?
rzwitserloot

ฉันไม่ได้เข้าใจความแตกต่างระหว่าง @BeforeClass แล้ว @Before. ไหนช่วยทำให้ชัดเจน pls?
Amadán

ทุกวิธีการของกัน @Before คือวิ่งหนีก่อนที่ กันและ บททดสอบ ทุกวิธีการของกัน @BeforeClass เป็นไปแค่ครั้งเดียวก่อนที่จะมีบททดสอบ โดยปกติแล้วคุณตั้งค่า static งอย่างเกี่ยวกับ @BeforeClass ซึ่งเป็นงั้นส่งที่ใช้(ดังนั้น,การทดสอบการไม่มีอิสระ). เธอตั้งคนที่ไม่ใช่รูปแบบของกัน @Beforeและดังนั้นการทดสอบการเป็นอิสระ. แค่อ่าน docs สำหรับพวกนี้หมายเหตุประกอบ.
rzwitserloot

@BeforeClass (JUnit 5: @BeforeAll)วิ่งหนีครั้งที่สองสำหรับตลอดทดสอบชั้นเรียน @Before (JUnit 5: @BeforeEach)วิ่งมาก่อนแต่ละการทดสอบเดี่ยววิธีการ.
rzwitserloot

ฉันใช้ JUnit5 แล้วฉันเห็นความแตกต่างระหว่าง @BeforeEach กับ @BeforeAll เอ่อออกจากคำอธิบาย แต่ฉันไม่แน่ใจว่าฉันควรจะหรือไม่เคลียร์รายชื่อที่ใช้โดยหลายบททดสอบ ฉันพวกเราจำเป็นต้องล้างพวกเขาอยู่ @AfterEach. รู้บ้างมั้ย?
avandeursen

ยังไม่เคลียร์รายการ มันก็ยังฟังดูเหมือนคุณควรของเล่นอยู่กับเรื่องนี้หน่อยเพราะเห็นได้ชัดว่าเป็นดังนั้นคำตอบไม่พอสำหรับคุณ นั่นเป็นสัญชาตญาณ! แค่..ให้ทักษ์สันติโดยจัสตินแฮมเมเพิ่มบางส่วนประกอบต้องการรายชื่อสามารถใช้ถอยแค่ครั้งเดียวเมื่ออยู่ @Beforeและการพิมพ์บางอย่างโดยไม่ต้องการเอาออกอะไรเลย งั้นก็แค่สังเกตการณ์จะเกิดอะไรขึ้น

มันสามารถเป็นใช่มันสามารถเป็นเล่นแต่ฉันคิดว่ามันเป็นจริงเหมือนกันสถานการณ์มันต้องเป็นนายพลเข้ามาสำหรับเรื่องนั้น ดังนั้นฉันแค่ต้องการที่จะเป็น clarified เรื่องหน่วยทดสอบชุมนุมสำหรับเปลอกใช้คนเดียวกับตัวแปร(e.g. แค่ defining ครั้งหนึ่งใน@BeforeEach หรื @BeforeAll ที่สองตัวแปรอยู่ @AfterEach. ดังนั้นอะไรคือวิธีที่เหมาะสมสำหรับสถานการณ์นี้?. รู้บ้างมั้ย?

ใช้ @Before. ฉันไม่รู้ว่าอะไรจะยังคงสับสนคุณตอนนี้ คำตอบสะกดมันออกไป!

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่