Java的Junit與debug模式入門
Java的Junit與debug模式入門
1.Junit的使用入門
導入eclipse內置的junit—junit—junit相應的版本,方式1如下:
方式二使用maven加載如下(見後續maven):
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
<scope>test</scope>
</dependency>
</dependencies>
倘若需要找依賴請到官網上查找,例如如下
https://junit.org/junit5/docs/current/user-guide/
2.Junit4的常用的方法
@Test 測試方法
@Ignorde 忽略的測試方法
@Before 在每一個方法測試之前運行
@After 在每一個方法之後運行
@BeforeClass 在所有測試方法之前運行,需要的靜態的表達方式
@AfterClass 在所有測試方法之後運行,需要是靜態的表達方式
public class JUnitTest {
@After
public void init() {
System.out.println("init");
}
@Before
public void destroy() {
System.out.println("after");
}
@Test
public void test() {
System.out.println("test");
}
@BeforeClass
public static void testBeforeClass() {
System.out.println("beforeClass");
}
@AfterClass
public static void testAfaterClass() {
System.out.println("afterClass");
}
}//beforeClass before test after afterClass
所以順序是beforeClass before test after afterClass
對於junit5的常用方法(較junit4表達略有不同)
@BeforeAll 只執行一次,在所有的測試方法之前運行(類似於 BeforeClass),需要是靜態的方法。
@BeforeAll 只執行一次,在所有的測試方法之前運行(類似於 AfterClass),需要的靜態的方法
@BeforeEach 在每個測試方法之前運行,類似於(@Before)
@AfterEach 在每個測試方法之後運行,類似於(@After)
@Test
@DisplayName 更改在測試界面顯示的名稱。
@Disabled 忽略(類似於@Ignore)
public class JUnitTest {
@BeforeAll
public static void initBefore() {
System.out.println("beforeall");
}
@AfterAll
public static void destroyAfter() {
System.out.println("destroyAfter");
}
@Test
@DisplayName("testHello")
public void test(){
System.out.println("test");
}
@BeforeEach
public void testBeforeEach() {
System.out.println("beforeEach");
}
@AfterEach
public void testAfterEach() {
System.out.println("afterEach");
}
@Test
@Disabled
@DisplayName("testHello")
public void test1(){
System.out.println("test");
}
}
輸出結果依次為
Beforeall beforeEach test afterEach destroyAfter
Failures test運行錯誤
Errors 程序自身的runtime錯誤
3.Junit的斷言
public class JUnitAssert {
@Test
public void standardAssertions() {
assertEquals(2, 2);
assertEquals(4, 4, "The optional assertion message is now the last parameter."); assertTrue(‘a‘ < ‘b‘, () -> "Assertion messages can be lazily evaluated -- "
+ "to avoid constructing complex messages unnecessarily.");
}
@Test
public void groupedAssertions() {
assertAll("person",
() -> assertEquals("John", "John"),
() -> assertEquals("Doe", "Doe")
);
}
@SuppressWarnings("static-access")
@Test
public void timeoutNotExceeded() throws InterruptedException {
assertTimeout(Duration.ofSeconds(2), ()->{ new Thread().sleep(1000);});
}
@Test
public void assertWithHamcrestMatcher() {
assertThat(2 + 1, is(equalTo(3)));
assertThat(2 + 1, not(3));
/*相應還有containsString endsWith startWith
equlTo equalToIgnoringCase allOf(比某大且比某小)
anyOf(滿足一個條件即可) greatThan(大於) lessThan(小於)
closeTO 正負 hasKey(map集合) hasValue(map集合)等
這些方法導包有些麻煩,需要復制import static org.hamcrest.CoreMatchers.not後將not更改為相應的方法
*/
}
}
還有很多其他的方法 ,可以相應的去https://junit.org/junit5/docs/current/user-guide/查看
4.Debug模式
斷點 debug測試相關按鈕,或者鼠標右鍵debug as 表示運行到了這一步是方法進入方法裏面,指向下一行 是方法不進入方法裏邊,指向下一行,運行到下一個斷點從方法裏面跳出來的下一行 不運行方法裏邊的後續代碼行,返回到當前方法行的起始位置。
運行相關的變量參數表
運行相關的信息
Java的Junit與debug模式入門