คำถามติดแท็ก junit4

เวอร์ชัน 4 ของเฟรมเวิร์กการทดสอบ Junit Java Unit ยอดนิยม

30
คุณยืนยันว่ามีข้อยกเว้นบางอย่างเกิดขึ้นในการทดสอบ JUnit 4 ได้อย่างไร
ฉันจะใช้ JUnit4 โดยใช้สำนวนเพื่อทดสอบว่าบางรหัสผิดพลาดได้อย่างไร ในขณะที่ฉันสามารถทำอะไรเช่นนี้: @Test public void testFooThrowsIndexOutOfBoundsException() { boolean thrown = false; try { foo.doStuff(); } catch (IndexOutOfBoundsException e) { thrown = true; } assertTrue(thrown); } ฉันจำได้ว่ามีคำอธิบายประกอบหรือ Assert.xyz หรือบางสิ่งที่มีความบกพร่องน้อยกว่าและมีจิตวิญญาณของ JUnit มากขึ้นสำหรับสถานการณ์ประเภทนี้
1999 java  exception  junit  junit4  assert 

4
ความแตกต่างระหว่าง @Before, @BeforeClass, @BeforeEach และ @BeforeAll
ความแตกต่างที่สำคัญระหว่างคืออะไร @Before และ @BeforeClass และใน JUnit 5 @BeforeEachและ@BeforeAll @After และ @AfterClass ตามที่JUnit Api @Beforeใช้ในกรณีต่อไปนี้: เมื่อเขียนการทดสอบเป็นเรื่องปกติที่พบว่าการทดสอบหลายรายการต้องการวัตถุที่คล้ายกันที่สร้างขึ้นก่อนที่จะสามารถเรียกใช้ได้ ในขณะที่@BeforeClassสามารถใช้เพื่อสร้างการเชื่อมต่อฐานข้อมูล แต่@Beforeทำไม่ได้เหมือนกันเหรอ?

29
Maven ไม่พบการทดสอบ JUnit ที่จะเรียกใช้
ฉันมีโปรแกรม maven มันรวบรวมได้ดี เมื่อฉันเรียกใช้mvn testจะไม่เรียกใช้การทดสอบใด ๆ (ภายใต้หัวข้อ TESTs บอกว่าThere are no tests to run.) -Xผมเคยสร้างปัญหานี้ด้วยการติดตั้งง่ายสุดซึ่งผมจะรวมถึงด้านล่างเช่นเดียวกับการส่งออกเมื่อทำงานกับ การทดสอบหน่วยทำงานได้ดีจาก eclipse (ทั้งคู่กับแพ็คเกจ junit เริ่มต้นและเมื่อฉันรวม junit.jar ที่ดาวน์โหลดโดย maven) mvn ยังtest-compileสร้างคลาสได้อย่างถูกต้องภายใต้คลาสทดสอบ ฉันใช้งานบน OSX 10.6.7 ด้วย Maven 3.0.2 และ java 1.6.0_24 นี่คือโครงสร้างไดเรกทอรี: /my_program/pom.xml /my_program/src/main/java/ClassUnderTest.java /my_program/src/test/java/ClassUnderTestTests.java pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my_group</groupId> <artifactId>my_program</artifactId> …
416 java  maven  junit  junit4  maven-3 

18
วิธีรันเมธอดการทดสอบตามลำดับเฉพาะใน JUnit4
ฉันต้องการที่จะดำเนินการวิธีการทดสอบที่มีคำอธิบายประกอบตาม@Testลำดับที่เฉพาะเจาะจง ตัวอย่างเช่น: public class MyTest { @Test public void test1(){} @Test public void test2(){} } ฉันต้องการที่จะให้แน่ใจว่าจะเรียกใช้test1()ก่อนtest2()ทุกครั้งที่ผมทำงานแต่ฉันไม่สามารถหาคำอธิบายประกอบเช่นMyTest@Test(order=xx) ฉันคิดว่ามันเป็นคุณสมบัติที่สำคัญมากสำหรับ JUnit หากผู้เขียน JUnit ไม่ต้องการคุณลักษณะการสั่งซื้อทำไม?

11
ฉันจะยืนยันข้อความแสดงข้อยกเว้นด้วยคำอธิบายประกอบการทดสอบ JUnit ได้อย่างไร
ฉันได้เขียนการทดสอบ JUnit สองสาม@Testฉบับพร้อมคำอธิบายประกอบ หากวิธีทดสอบของฉันมีข้อยกเว้นที่ตรวจสอบและหากฉันต้องการยืนยันข้อความพร้อมกับข้อยกเว้นจะมีวิธีการทำ@TestคำอธิบายประกอบJUnit หรือไม่? AFAIK, JUnit 4.7 ไม่ได้มีคุณสมบัตินี้ แต่มีรุ่นอื่น ๆ ในอนาคตหรือไม่ ฉันรู้ใน. NET คุณสามารถยืนยันข้อความและชั้นยกเว้น กำลังมองหาคุณสมบัติที่คล้ายกันในโลก Java นี่คือสิ่งที่ฉันต้องการ: @Test (expected = RuntimeException.class, message = "Employee ID is null") public void shouldThrowRuntimeExceptionWhenEmployeeIDisNull() {}

6
ความแตกต่างระหว่าง 2 JUnit Assert
เฟรมเวิร์ก JUnit มี 2 Assertคลาส (ในแพ็กเกจที่แตกต่างกันอย่างเห็นได้ชัด) และวิธีการในแต่ละรายการดูเหมือนจะคล้ายกัน มีใครอธิบายได้ไหมว่าเพราะเหตุใด เรียนผมหมายถึงคือ: และjunit.framework.Assertorg.junit.Assert

15
จะทดสอบได้อย่างไรว่าไม่มีข้อยกเว้นเกิดขึ้น?
ฉันรู้ว่าวิธีหนึ่งที่จะทำได้: @Test public void foo(){ try{ //execute code that you expect not to throw Exceptions. } catch(Exception e){ fail("Should not have thrown any exception"); } } มีวิธีใดที่สะอาดกว่าในการทำสิ่งนี้ (อาจใช้ Junit @Ruleหรือไม่?)

13
ได้รับ“ NoSuchMethodError: org.hamcrest.Matcher.describeMismatch” เมื่อเรียกใช้การทดสอบใน IntelliJ 10.5
ฉันใช้ JUnit-dep 4.10 และ Hamcrest 1.3.RC2 ฉันได้สร้าง matcher ที่กำหนดเองที่มีลักษณะดังนี้: public static class MyMatcher extends TypeSafeMatcher<String> { @Override protected boolean matchesSafely(String s) { /* implementation */ } @Override public void describeTo(Description description) { /* implementation */ } @Override protected void describeMismatchSafely(String item, Description mismatchDescription) { /* implementation */ } } มันทำงานได้อย่างสมบูรณ์แบบเมื่อทำงานจากบรรทัดคำสั่งโดยใช้ …

12
การเปลี่ยนชื่อของการทดสอบแบบกำหนดพารามิเตอร์
มีวิธีตั้งชื่อกรณีทดสอบแบบกำหนดเองของฉันเองเมื่อใช้การทดสอบแบบกำหนดพารามิเตอร์ใน JUnit4 หรือไม่ ฉันต้องการเปลี่ยนค่าเริ่มต้น[Test class].runTest[n]- เป็นสิ่งที่มีความหมาย

7
assertEquals ของ Java นั้นเชื่อถือได้หรือไม่?
ฉันรู้ว่ามีปัญหาบางอย่างเมื่อเปรียบเทียบสอง== Stringsดูเหมือนว่าString.equals()เป็นวิธีที่ดีกว่า ดีที่ฉันทำทดสอบ JUnit assertEquals(str1, str2)และความชอบของฉันคือการใช้งาน นี่เป็นวิธีที่เชื่อถือได้ในการยืนยันสองสตริงที่มีเนื้อหาเดียวกันหรือไม่? ฉันจะใช้assertTrue(str1.equals(str2))แต่แล้วคุณไม่ได้รับประโยชน์จากการเห็นสิ่งที่คาดหวังและค่าที่แท้จริงคือความล้มเหลว ในบันทึกที่เกี่ยวข้องไม่มีใครมีลิงค์ไปยังหน้าหรือเธรดที่อธิบายปัญหาด้วยstr1 == str2?
199 java  string  junit  junit4 

4
Junit @Rule ทำงานอย่างไร
ฉันต้องการเขียนกรณีทดสอบสำหรับรหัสจำนวนมากฉันต้องการทราบรายละเอียดของ@Ruleคุณสมบัติการเพิ่มความคิดเห็นของ JUnit เพื่อที่ฉันจะสามารถใช้สำหรับการเขียนกรณีทดสอบได้ โปรดให้คำตอบหรือลิงก์ที่ดีซึ่งให้คำอธิบายโดยละเอียดเกี่ยวกับฟังก์ชันการทำงานผ่านตัวอย่างง่ายๆ
195 java  junit  junit4  junit-rule 

6
Mockito + PowerMock LinkageError ขณะที่ล้อเลียนคลาสระบบ
ฉันได้รับข้อมูลโค้ดแล้ว: @RunWith(PowerMockRunner.class) @PrepareForTest({Thread.class}) public class AllMeasuresDataTest { @Before public void setUp() throws Exception { } @Test public void testGetMeasures() { AllMeasuresData measure = new AllMeasuresData(); assertEquals(measure.getMeasures(), null); HashMap<String, Measure> map = new HashMap<String, Measure>(); measure.setMeasures(map); assertEquals(measure.getMeasures(), map); measure.setMeasures(null); assertEquals(measure.getMeasures(), null); } @Test public void testAllMeasuresData() throws IOException { ClassLoader loader …

7
เหตุใดฉันจึงควรใช้ Hamcrest-Matcher และ assertThat () แทน assertXXX แบบดั้งเดิม () - วิธีการ
เมื่อฉันดูตัวอย่างในคลาส Assert JavaDoc assertThat("Help! Integers don't work", 0, is(1)); // fails: // failure message: // Help! Integers don't work // expected: is <1> // got value: <0> assertThat("Zero is one", 0, is(not(1))) // passes assertEquals( 0, 1 )ฉันไม่ได้เห็นข้อได้เปรียบใหญ่กว่าสมมติว่า มันอาจจะดีสำหรับข้อความถ้าโครงสร้างมีความซับซ้อนมากขึ้น แต่คุณเห็นข้อดีมากกว่านี้ไหม? การอ่าน?
153 java  testing  junit  junit4  hamcrest 


6
Junit: แยกการทดสอบการรวมและการทดสอบหน่วย
ฉันได้รับการทดสอบ Junit มาเป็นจำนวนมาก แต่การทดสอบเหล่านี้ (นอกเหนือจากการทดสอบส่วนใหญ่ไม่ได้ผล) เป็นส่วนผสมของการทดสอบหน่วยจริงและการทดสอบการรวม (ต้องใช้ระบบภายนอกฐานข้อมูล ฯลฯ ) ดังนั้นฉันจึงพยายามคิดหาวิธีแยกพวกมันออกจากกันเพื่อที่ฉันจะได้รันการทดสอบหน่วยได้อย่างรวดเร็วและการทดสอบการรวมหลังจากนั้น ตัวเลือกคือ .. แยกเป็นไดเรกทอรีแยกต่างหาก ย้ายไปที่ Junit4 (จาก v3) และใส่คำอธิบายประกอบคลาสเพื่อแยกคลาส ใช้หลักการตั้งชื่อไฟล์เพื่อบอกว่าคลาสคืออะไรเช่น AdapterATest และ AdapterAIntergrationTest 3 มีปัญหาว่า Eclipse มีตัวเลือก "เรียกใช้การทดสอบทั้งหมดในโครงการ / แพ็คเกจหรือโฟลเดอร์ที่เลือก" ดังนั้นจึงยากมากที่จะเรียกใช้การทดสอบการรวมระบบ 2: เสี่ยงที่นักพัฒนาอาจเริ่มเขียนการทดสอบการรวมในชั้นเรียนทดสอบหน่วยและมันก็ยุ่งเหยิง 1: ดูเหมือนจะเป็นทางออกที่ดีที่สุด แต่ลำไส้ของฉันบอกว่าต้องมีทางออกที่ดีกว่านี้ นั่นคือคำถามของฉันคุณจะแยกการทดสอบการรวมและการทดสอบหน่วยที่เหมาะสมได้อย่างไร

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