Java的Junit与debug模式入门
1.Junit的使用入门
导入eclipse内置的junit—junit—junit相应的版本,方式1如下:
方式二使用maven加载如下(见后续maven):
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
![](/qrcode.jpg)
<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
表示运行到了这一步
是方法进入方法里面,指向下一行 是方法不进入方法里边,
指向下一行,
运行到下一个断点
从方法里面跳出来的下一行
不运行方法里边的后续代码行,返回到当前方法行的起始位置。
运行相关的变量参数表
运行相关的信息