jquery
2015-05-26 17:38
@runWith注解起什么作用啊?
// 比如 这里有个配置类,在 src.main.java 包下面
@Slf4j
@Configuration
public class RestClientConfig {
/**
* 支持多次使用 response.getBody() 读取流, 更多详情,请参考:https://blog.csdn.net/w1047667241/article/details/109823783
*/
@Bean
public RestTemplate restTemplate() {
RestTemplate template = new RestTemplate(
// 多次使用 getBody() response body
new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory()));
return template;
}
}
// 你想在 测试类里面 使用这个 Bean 对象,有2种方式,1 是 注解 @Autowired 注入;2 是 代码手动 getBean
//方式1:
@RunWith(SpringJUnit4ClassRunner.class) // 在该类中运行测试,提供一些 spring 的某些特性支持
@ContextConfiguration(classes = RestClientConfig.class) // 利用SpringJUnit4ClassRunner 注入 Bean
public class RestTemplateConfigTest {
@Autowired //再比如这个特性,直接使用 @Autowired
RestTemplate restTemplate;
@Test
public void test01() {
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://httpbin.org/post", null, String.class);
System.out.println("楼上的某些评论,成功的解决了提出问题的人,典型的 国产思维。这可不好呀,都是自己人。");
}
}
// 方式2:
// 不加 @RunWith()
public class RestTemplateConfigTest {
@Test
public void test02() {
ApplicationContext context = new AnnotationConfigApplicationContext(RestClientConfig.class);
RestTemplate restTemplate = context.getBean(RestTemplate.class);
String object = restTemplate.getForObject("https://不要解决提出问题的人.ok?param=yes", String.class);
}
}
根据Junit源码
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface RunWith {
Class<? extends Runner> value();
}@RunWith注解实质上是一个接口,是用来扩展Junit的Test Runner的。
那么什么是Test Runner呢?
比如 Suite , Parameterized 以及 SpringTest 都是`Test Runner` ,他们都是 `org.junit.runner.Runner `的子类。
abstract Description | getDescription() |
abstract void | run(RunNotifier notifier)Run the tests for this runner. |
int | testCount() |
其中有两个抽象方法 getDescription 和 run。还有一个用来统计测试执行测试的普通方法 testCount。
那么所有想要通过扩展Junit的其他测试框架,都应遵循这个规范。
也就是两个步骤
通过继承 org.junit.runner.Runner 实现里面的抽象方法
通过注解注入你实现的Test Runner 比如:@RunWith(YourRunnerImplement.class)
这也就是RunWith 这个Junit注解的来龙去脉,希望 帮到你。
参考文档:
http://junit.sourceforge.net/javadoc/org/junit/runner/Runner.html
http://junit.sourceforge.net/javadoc/org/junit/runner/RunWith.html
@RunWith(SpringJUnit4ClassRunner.class)使用了Spring的SpringJUnit4ClassRunner,以便在测试开始的时候自动创建Spring的应用上下文。其他的想创建spring容器的话,就得子啊web.xml配置classloder。 注解了@RunWith就可以直接使用spring容器,直接使用@Test注解,不用启动spring容器
都知道是更改测试运行器。是在什么情况下使用更好呢。
大概意思是更改使用的测试类为SpringJUnit4ClassRunner.class,使之适应spring。
更改测试运行器
楼上说的一点也没用,楼主问的是作用--是让什么东西做什么,你答的算是什么东西啊,
就像“@RunWith(JUnit4.class)就是指用JUnit4来运行"这句话,是什么让Junit4来运行什么啊,
@RunWith就是一个运行器
@RunWith(JUnit4.class)就是指用JUnit4来运行
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
@RunWith(Suite.class)的话就是一套测试集合,
JUnit—Java单元测试必备工具
77978 学习 · 96 问题
相似问题