hugo 怎么做网站,天津市建设工程交易中心网站,义乌联合外发加工网,湛江市建设局官方网站JUnit测试运行器#xff08;Test Runner#xff09;决定了JUnit如何执行测试。JUnit有多个测试运行器#xff0c;每个运行器都有特定的功能和用途。
1. 默认运行器
当没有显式指定运行器时#xff0c;JUnit会使用默认运行器#xff0c;这在JUnit 4和JUnit 5之间有所不同…JUnit测试运行器Test Runner决定了JUnit如何执行测试。JUnit有多个测试运行器每个运行器都有特定的功能和用途。
1. 默认运行器
当没有显式指定运行器时JUnit会使用默认运行器这在JUnit 4和JUnit 5之间有所不同。
JUnit 4 默认运行器
在JUnit 4中默认运行器是BlockJUnit4ClassRunner。
import org.junit.Test;
import static org.junit.Assert.assertEquals;public class DefaultRunnerTest {Testpublic void testAdd() {assertEquals(5, 2 3);}
}JUnit 5 默认运行器
在JUnit 5中不需要显式指定运行器JUnit Jupiter会自动运行测试。
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;public class DefaultRunnerTest {Testpublic void testAdd() {assertEquals(5, 2 3);}
}2. RunWith 注解
RunWith注解用于指定JUnit 4的测试运行器。以下是一些常用的运行器
2.1 SpringRunner
SpringRunner原名SpringJUnit4ClassRunner用于在JUnit 4中运行Spring测试提供Spring应用程序上下文的支持。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.assertEquals;RunWith(SpringRunner.class)
public class SpringRunnerTest {Testpublic void testAdd() {assertEquals(5, 2 3);}
}2.2 Parameterized
Parameterized运行器用于运行参数化测试即同一个测试方法可以用不同的参数多次运行。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.assertEquals;RunWith(Parameterized.class)
public class ParameterizedTest {private int input1;private int input2;private int expected;public ParameterizedTest(int input1, int input2, int expected) {this.input1 input1;this.input2 input2;this.expected expected;}Parameterized.Parameterspublic static CollectionObject[] data() {return Arrays.asList(new Object[][] {{ 1, 2, 3 },{ 2, 3, 5 },{ 3, 5, 8 }});}Testpublic void testAdd() {assertEquals(expected, input1 input2);}
}2.3 Suite
Suite运行器用于运行一组测试类。
import org.junit.runner.RunWith;
import org.junit.runners.Suite;RunWith(Suite.class)
Suite.SuiteClasses({TestClass1.class,TestClass2.class
})
public class TestSuite {// 空类仅用于运行指定的测试类
}3. JUnit 5 扩展模型
在JUnit 5中不使用RunWith而是使用ExtendWith注解来扩展测试功能。
3.1 SpringExtension
SpringExtension用于在JUnit 5中运行Spring测试提供Spring应用程序上下文的支持。
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;ExtendWith(SpringExtension.class)
public class SpringExtensionTest {Testpublic void testAdd() {assertEquals(5, 2 3);}
}3.2 ParameterizedTest
ParameterizedTest注解用于运行参数化测试即同一个测试方法可以用不同的参数多次运行。
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;public class ParameterizedTestExample {ParameterizedTestCsvSource({1, 2, 3,2, 3, 5,3, 5, 8})void testAdd(int input1, int input2, int expected) {assertEquals(expected, input1 input2);}
}4. 自定义运行器和扩展
4.1 自定义JUnit 4 运行器
可以创建自定义运行器来扩展JUnit 4的功能。
import org.junit.runners.BlockJUnit4ClassRunner;
import org.junit.runners.model.InitializationError;public class CustomRunner extends BlockJUnit4ClassRunner {public CustomRunner(Class? klass) throws InitializationError {super(klass);}Overrideprotected void runChild(org.junit.runners.model.FrameworkMethod method, org.junit.runner.notification.RunNotifier notifier) {System.out.println(Running test: method.getName());super.runChild(method, notifier);}
}import org.junit.Test;
import org.junit.runner.RunWith;RunWith(CustomRunner.class)
public class CustomRunnerTest {Testpublic void testAdd() {assertEquals(5, 2 3);}
}4.2 自定义JUnit 5 扩展
可以创建自定义扩展来扩展JUnit 5的功能。
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;public class CustomExtension implements BeforeEachCallback {Overridepublic void beforeEach(ExtensionContext context) {System.out.println(Before each test: context.getDisplayName());}
}import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;ExtendWith(CustomExtension.class)
public class CustomExtensionTest {Testpublic void testAdd() {assertEquals(5, 2 3);}
}5. 使用示例Spring Boot 测试
结合使用ExtendWith和SpringBootTest进行Spring Boot应用程序的集成测试。
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;ExtendWith(SpringExtension.class)
SpringBootTest
public class MyApplicationTests {Autowiredprivate MyService myService;Testpublic void testAdd() {assertEquals(5, myService.add(2, 3));}
}总结
JUnit 4中RunWith用于指定测试运行器常用的运行器包括SpringRunner、Parameterized、Suite等。JUnit 5中ExtendWith用于扩展测试功能常用的扩展包括SpringExtension、ParameterizedTest等。可以创建自定义运行器JUnit 4或扩展JUnit 5来满足特定测试需求。SpringBootTest用于Spring Boot应用程序的集成测试。
这些工具和技术使得JUnit能够灵活地适应各种测试需求。