ฉันกำลังสร้างหน่วยในการทดสอบของจาวาและสำหรับแต่ละวิธีการผสร้างเหมือนกันรายชื่อตัวแปรเป็นต้น ที่อยู่อีกมือแน่นอนฉันคิดว่าฉันจะสามารถสร้างพวกนี้ตัวแปรเป็นโกลบอลและตั้งค่าของพวกเขาอยู่ใน setup()
วิธีการ(ใน @Before
)แต่ฉันไม่แน่ใจว่าค่าอาจจะเปลี่ยนไปตอนที่กำลังทำการทดสอบเนื่องจาก multithreading เป็นต้น ดังนั้นอะไรคือวิธีที่ดีที่สุดสำหรับสถานการณ์นี้?
ไม่มีอะไรต้องกังวลหรอก JUnit จะสร้างใหม่ตัวอย่างของคุณทดสอบชั้นเรียนและจากนั้นก็วิ่งหนีกัน @Before
วิธีการและหลังจากนั้นขึ้นอยู่กับหนีคน @Test
วิธีการและนั่นมันเพลงและเต้นประจำวันอีกครั้ง สำหรับทุก @Test
annotated วิธีการอยู่ในห้องเรียน. คุณกำลังใช้ @Before
เหมือนกับที่มันเป็นแรง:มันคือสำหรับจัดเก็บ initialization รหัสนั่นต้องการสำหรับการทดลองตรวจสอบในทดสอบห้องเรียน
JUnit มันแบบนี้เพราะ'ทดสอบอิสรภาพ'เป็นต้อง:การทดสอบโดยเฉพาะ,ผิดพลาดหรือผ่านอิสระของคนกำลังจะออกคำสั่งที่คุณเรียกประมวลผลพวกเขา
ทุกดังนั้นบ่อยครั้ง init คือโพรเซสดังนั้นแพงนั่นมันไม่คุ้มค่ามันต้องจ่ายค่า'ค่า'ของวิ่งมันซ้ำแล้วซ้ำอีกครั้งสำหรับทุกการทดสอบ หมายเหตุกำกับ @BeforeClass
อยู่ก่อนโดยเฉพาะสำหรับ มัน เป้าหมาย คนของเอกสารจาวา(javadoc)language @BeforeClass
แม้แต่คาถาออกที่นี่ข้อตกลงนั้นทดสอบอิสรภาพและควรเพราะฉะนั้นคงจะถูกใช้หากตั้งค่างานคุณทำอย่างภายในช่างเป็นวิธีการเป็นที่พัฒนาอย่างเหมาะสแพง(computationally หรือไม่เช่นนั้น)เพื่อให้มัน tradeoff.
หรือจะพูดอีกอย่าง:
คุณเป็นห่วงทดสอบอิสรภาพเป็นจริงแต่พวกเขาจะปรับใช้ @BeforeClass
. @Before
ไม่ทรมานจากปัญหานี้;โค้ดนั่นคืออีกครั้สำหรับทุกการทดสอบ
NB:คุณสามารถโยนทั้งหมดนี่ออกไปนอกหน้าต่างถ้าคุณมี static
เกิดเรื่องอะไรนิดหน่อย ไม่มีรูปแบบของในรทดสอบรหัสถ้าคุณรู้ว่าสิ่งที่คุณกำลังทำอะไรอยู่ ฉันเดาว่าคุณไม่มีมันในกรณีนั้น-ทำดีต่อไปของคุณการทดสอบการเป็นอิสระ.
@BeforeClass
แล้ว @Before
. ไหนช่วยทำให้ชัดเจน pls? @Before
คือวิ่งหนีก่อนที่ กันและ บททดสอบ ทุกวิธีการของกัน @BeforeClass
เป็นไปแค่ครั้งเดียวก่อนที่จะมีบททดสอบ โดยปกติแล้วคุณตั้งค่า static
งอย่างเกี่ยวกับ @BeforeClass
ซึ่งเป็นงั้นส่งที่ใช้(ดังนั้น,การทดสอบการไม่มีอิสระ). เธอตั้งคนที่ไม่ใช่รูปแบบของกัน @Before
และดังนั้นการทดสอบการเป็นอิสระ. แค่อ่าน docs สำหรับพวกนี้หมายเหตุประกอบ. @BeforeClass
(JUnit 5: @BeforeAll
)วิ่งหนีครั้งที่สองสำหรับตลอดทดสอบชั้นเรียน @Before
(JUnit 5: @BeforeEach
)วิ่งมาก่อนแต่ละการทดสอบเดี่ยววิธีการ. @BeforeEach
กับ @BeforeAll
เอ่อออกจากคำอธิบาย แต่ฉันไม่แน่ใจว่าฉันควรจะหรือไม่เคลียร์รายชื่อที่ใช้โดยหลายบททดสอบ ฉันพวกเราจำเป็นต้องล้างพวกเขาอยู่ @AfterEach
. รู้บ้างมั้ย? @Before
และการพิมพ์บางอย่างโดยไม่ต้องการเอาออกอะไรเลย งั้นก็แค่สังเกตการณ์จะเกิดอะไรขึ้น @AfterEach
. ดังนั้นอะไรคือวิธีที่เหมาะสมสำหรับสถานการณ์นี้?. รู้บ้างมั้ย? @Before
. ฉันไม่รู้ว่าอะไรจะยังคงสับสนคุณตอนนี้ คำตอบสะกดมันออกไป!