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

กรอบการทดสอบหน่วยยอดนิยมสำหรับ Java และ Scala เวอร์ชันล่าสุดคือ JUnit 5 รองรับการทดสอบตามคำอธิบายประกอบแบบย่อและพารามิเตอร์ พิจารณาใช้ร่วมกับแท็ก Java หรือ Scala เพื่อระบุกรณีการใช้งานของคุณ

8
AndroidJUnit4.class เลิกใช้แล้ว: วิธีใช้ androidx.test.ext.junit.runners.AndroidJUnit4
สำหรับการทดสอบเครื่องมือของฉันฉันใช้ @RunWith(AndroidJUnit4.class) จาก import androidx.test.runner.AndroidJUnit4; เพื่อสร้างกรณีทดสอบของฉัน ตอนนี้สายนี้ได้รับการทำเครื่องหมายว่าเลิกกับคำใบ้ที่จะใช้AndroidJUnit4จาก import androidx.test.ext.junit.runners.AndroidJUnit4 อย่างไรก็ตามถ้าฉันพยายามที่จะนำเข้าAndroidJUnit4จากแพคเกจที่มีชื่อฉันได้รับข้อผิดพลาดที่extไม่สามารถแก้ไขได้ คุณมีความคิดว่าควรรวมแพ็คเกจใดในการไล่ระดับสีเพื่อแก้ไขปัญหานี้

14
รับชื่อของการทดสอบที่กำลังดำเนินการใน JUnit 4
ใน JUnit 3 ฉันสามารถรับชื่อของการทดสอบที่รันอยู่ในปัจจุบันเช่นนี้: public class MyTest extends TestCase { public void testSomething() { System.out.println("Current test is " + getName()); ... } } ซึ่งจะพิมพ์ "การทดสอบปัจจุบันคือการทดสอบบางอย่าง" มีวิธีการนอกกรอบหรือวิธีการง่ายๆใน JUnit 4 หรือไม่? พื้นหลัง: เห็นได้ชัดว่าฉันไม่ต้องการพิมพ์ชื่อการทดสอบ ฉันต้องการโหลดข้อมูลเฉพาะของการทดสอบที่เก็บไว้ในทรัพยากรที่มีชื่อเดียวกับการทดสอบ คุณรู้ว่าการประชุมเกี่ยวกับการกำหนดค่าและทุกสิ่งที่
240 java  unit-testing  junit 

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หรือไม่?)

6
การเติม Spring @Value ระหว่างการทดสอบหน่วย
ฉันกำลังพยายามเขียนการทดสอบหน่วยสำหรับถั่วง่ายๆที่ใช้ในโปรแกรมของฉันเพื่อตรวจสอบแบบฟอร์ม bean มีคำอธิบายประกอบด้วย@Componentและมีตัวแปรคลาสที่ถูกเตรียมข้อมูลเบื้องต้นโดยใช้ @Value("${this.property.value}") private String thisProperty; ฉันต้องการเขียนการทดสอบหน่วยสำหรับวิธีการตรวจสอบภายในคลาสนี้อย่างไรก็ตามถ้าเป็นไปได้ฉันต้องการจะทำโดยไม่ต้องใช้ไฟล์คุณสมบัติ เหตุผลของฉันที่อยู่เบื้องหลังคือถ้าค่าที่ฉันดึงจากการเปลี่ยนแปลงไฟล์คุณสมบัติฉันต้องการที่จะไม่ส่งผลกระทบต่อกรณีทดสอบของฉัน กรณีทดสอบของฉันกำลังทดสอบรหัสที่ตรวจสอบความถูกต้องของค่าไม่ใช่ตัวของตัวเอง มีวิธีใช้รหัส Java ในคลาสทดสอบของฉันเพื่อเริ่มต้นคลาส Java และเติมคุณสมบัติ Spring @Value ภายในคลาสนั้นแล้วใช้เพื่อทดสอบด้วยหรือไม่ ฉันพบวิธีการที่ดูเหมือนว่าจะปิด แต่ยังคงใช้ไฟล์คุณสมบัติ ฉันต้องการทั้งหมดเป็นรหัส Java

23
การทดสอบอ็อบเจ็กต์ JSON สองรายการเพื่อดูความเท่าเทียมกันโดยไม่สนใจลำดับย่อยใน Java
ฉันกำลังมองหาไลบรารีการแยกวิเคราะห์ JSON ที่สนับสนุนการเปรียบเทียบวัตถุ JSON สองรายการโดยไม่สนใจลำดับลูกโดยเฉพาะสำหรับการทดสอบหน่วย JSON ที่กลับมาจากบริการบนเว็บ ไลบรารี JSON หลักใด ๆ สนับสนุนสิ่งนี้หรือไม่? ไลบรารี org.json ทำการเปรียบเทียบการอ้างอิงเท่านั้น
233 java  json  junit 

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 */ } } มันทำงานได้อย่างสมบูรณ์แบบเมื่อทำงานจากบรรทัดคำสั่งโดยใช้ …

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"))); ฉันผ่านการทดสอบเสมอ ฉันจะทำการยืนยันให้สำเร็จได้อย่างไร (ถ้าเป็นไปได้) ขอบคุณ.

24
วิธีการเลียนแบบชั้นเรียนสุดท้ายด้วย mockito
ฉันมีชั้นเรียนสุดท้ายสิ่งนี้: public final class RainOnTrees{ public void startRain(){ // some code here } } ฉันใช้คลาสนี้ในคลาสอื่นเช่นนี้: public class Seasons{ RainOnTrees rain = new RainOnTrees(); public void findSeasonAndRain(){ rain.startRain(); } } และในชั้นทดสอบ JUnit ของฉันสำหรับSeasons.javaฉันต้องการเยาะเย้ยRainOnTreesชั้นเรียน ฉันจะทำสิ่งนี้กับ Mockito ได้อย่างไร
218 java  junit  mockito 

9
JUnit 5: วิธียืนยันข้อยกเว้นถูกโยนทิ้งอย่างไร
มีวิธีที่ดีกว่าในการยืนยันว่าวิธีการใดมีข้อยกเว้นใน JUnit 5 หรือไม่? ขณะนี้ฉันต้องใช้ @Rule เพื่อตรวจสอบว่าการทดสอบของฉันมีข้อยกเว้น แต่ไม่สามารถใช้งานได้ในกรณีที่ฉันคาดว่าจะมีวิธีการมากมายที่จะใช้การยกเว้นในการทดสอบ

23
IntelliJ IDEA กับ Junit 4.7“ !!! JUnit เวอร์ชัน 3.8 หรือใหม่กว่าที่คาดไว้:”
เมื่อฉันพยายามเรียกใช้การทดสอบต่อไปนี้ในIntelliJ IDEAฉันได้รับข้อความ: "!!! JUnit เวอร์ชัน 3.8 ขึ้นไปที่คาดไว้:" ควรสังเกตว่านี่เป็นโครงการAndroid ที่ฉันทำงานใน IntelliJ IDEA 9 public class GameScoreUtilTest { @Test public void testCalculateResults() throws Exception { final Game game = new Game(); final Player player1 = new Player(); { final PlayedHole playedHole = new PlayedHole(); playedHole.setScore(1); game.getHoleScoreMap().put(player1, playedHole); } { final PlayedHole playedHole …

25
วิธีการยืนยัน JUnit บนข้อความในตัวบันทึก
ฉันมี code-under-test ที่เรียกใช้ตัวบันทึก Java เพื่อรายงานสถานะ ในรหัสทดสอบ JUnit ฉันต้องการตรวจสอบว่ามีการบันทึกรายการที่ถูกต้องในตัวบันทึกนี้ บางสิ่งบางอย่างตามบรรทัดต่อไปนี้: methodUnderTest(bool x){ if(x) logger.info("x happened") } @Test tester(){ // perhaps setup a logger first. methodUnderTest(true); assertXXXXXX(loggedLevel(),Level.INFO); } ฉันคิดว่าสิ่งนี้สามารถทำได้ด้วยตัวบันทึก (หรือตัวจัดการหรือตัวจัดรูปแบบ) ที่ดัดแปลงเป็นพิเศษ แต่ฉันต้องการใช้โซลูชันที่มีอยู่แล้วอีกครั้ง (และตามจริงแล้วมันไม่ชัดเจนสำหรับฉันเกี่ยวกับวิธีบันทึกที่บันทึกจากเครื่องบันทึก แต่สมมติว่าเป็นไปได้)
206 java  logging  junit  assert 

7
Java generics ต้องการ <เมื่อใด ขยาย T> แทน <T> และมีข้อเสียของการสลับ?
รับตัวอย่างต่อไปนี้ (ใช้ JUnit กับ Hamcrest matchers): Map&lt;String, Class&lt;? extends Serializable&gt;&gt; expected = null; Map&lt;String, Class&lt;java.util.Date&gt;&gt; result = null; assertThat(result, is(expected)); สิ่งนี้ไม่ได้คอมไพล์ด้วยassertThatลายเซ็นเมธอดJUnit ของ: public static &lt;T&gt; void assertThat(T actual, Matcher&lt;T&gt; matcher) ข้อความแสดงข้อผิดพลาดของคอมไพเลอร์คือ: Error:Error:line (102)cannot find symbol method assertThat(java.util.Map&lt;java.lang.String,java.lang.Class&lt;java.util.Date&gt;&gt;, org.hamcrest.Matcher&lt;java.util.Map&lt;java.lang.String,java.lang.Class &lt;? extends java.io.Serializable&gt;&gt;&gt;) อย่างไรก็ตามถ้าฉันเปลี่ยนassertThatลายเซ็นวิธีเป็น: public static &lt;T&gt; void assertThat(T result, Matcher&lt;? extends …
205 java  generics  junit 

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

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

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 …

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