为了账号安全,请及时绑定邮箱和手机立即绑定

@runWith注解起什么作用啊?

@runWith注解起什么作用啊?

正在回答

8 回答

// 比如 这里有个配置类,在 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);
    }
}





1 回复 有任何疑惑可以回复我~

根据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  DescriptiongetDescription()
           
abstract  voidrun(RunNotifier notifier)
          Run the tests for this runner.
 inttestCount()

其中有两个抽象方法 getDescription 和 run。还有一个用来统计测试执行测试的普通方法 testCount。

那么所有想要通过扩展Junit的其他测试框架,都应遵循这个规范。

也就是两个步骤

  1. 通过继承 org.junit.runner.Runner 实现里面的抽象方法

  2. 通过注解注入你实现的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




0 回复 有任何疑惑可以回复我~

@RunWith(SpringJUnit4ClassRunner.class)使用了Spring的SpringJUnit4ClassRunner,以便在测试开始的时候自动创建Spring的应用上下文。其他的想创建spring容器的话,就得子啊web.xml配置classloder。 注解了@RunWith就可以直接使用spring容器,直接使用@Test注解,不用启动spring容器


4 回复 有任何疑惑可以回复我~
#1

慕慕8191769

刚好解答了我的疑惑
2018-05-26 回复 有任何疑惑可以回复我~

都知道是更改测试运行器。是在什么情况下使用更好呢。

0 回复 有任何疑惑可以回复我~

大概意思是更改使用的测试类为SpringJUnit4ClassRunner.class,使之适应spring。

1 回复 有任何疑惑可以回复我~

更改测试运行器

0 回复 有任何疑惑可以回复我~

楼上说的一点也没用,楼主问的是作用--是让什么东西做什么,你答的算是什么东西啊,

就像“@RunWith(JUnit4.class)就是指用JUnit4来运行"这句话,是什么让Junit4来运行什么啊,

0 回复 有任何疑惑可以回复我~
#1

Wang_Yu

其实 "@RunWith就是一个运行器" 这一句话就已经足够解答问题。我还额外多说了那么多。你理解不了就是你的问题了。
2016-11-30 回复 有任何疑惑可以回复我~
#2

慕粉3612357

人家好歹说了一些作用,而你什么都没说
2017-09-29 回复 有任何疑惑可以回复我~
#3

12345hao

挡路不是你的本性,快走开,屁都放不出来还有资格说人家说的不好,我觉得人家是用最通俗的语言结合自己经验说的,一看你就是刚从北大青鸟毕业的非专业学生
2017-11-02 回复 有任何疑惑可以回复我~
#4

慕数据5398891 回复 12345hao

哦 哥们什么地方毕业的啊?秀一波呗 本人电子科技大学毕业 一样还是去北大青鸟学了半年不专业的知识 感觉对我受益颇多呢
2017-12-11 回复 有任何疑惑可以回复我~
#5

qq_弄臣_1 回复 12345hao

你成功的吸引了大家都来喷你
2018-09-05 回复 有任何疑惑可以回复我~
#6

theonec 回复 12345hao

兄弟很叼的样子吗
2019-03-31 回复 有任何疑惑可以回复我~
#7

我还会怀念过去 回复 12345hao

看到有人喷你我就放心了
2019-04-04 回复 有任何疑惑可以回复我~
#8

170的假兵长 回复 慕数据5398891

好意思说自己电子科大,你他妈不笑死我哈哈哈哈哈哈哈。我还斯坦福的呢
2019-08-15 回复 有任何疑惑可以回复我~
#9

170的假兵长 回复 12345hao

好想给你点赞,可惜慕课网没这个功能好像
2019-08-15 回复 有任何疑惑可以回复我~
#10

weixin_慕前端6231507 回复 12345hao

hhhhhhhhhhhh
2019-10-13 回复 有任何疑惑可以回复我~
#11

branchse 回复 12345hao

青鸟咋滴你了
2019-12-16 回复 有任何疑惑可以回复我~
#12

SHA_DOW

可以自己试一下加和不加的情况就能够理解了
2020-01-09 回复 有任何疑惑可以回复我~
#13

慕标9045768

楼上的,你们成功把提出问题的人给解决了 ,典型的国产思维
2020-11-19 回复 有任何疑惑可以回复我~
#14

慕标9045768 回复 慕标9045768

@Runwith 能很好的替代 junit 内置的 runner JUnit4, 这个runner 就是能使测试类的代码在其中运行的一个class类。当使用 @RunWith(SpringJUnit4ClassRunner.class) 时,可以使用spring 的一些特性,比如 @ContextConfiguration(classes = Config.class) ,然后在类内部就可以用 @Autowired 注入 config中的的Bean ,进而在 test() 方法中使用了。
2020-11-19 回复 有任何疑惑可以回复我~
查看9条回复

@RunWith就是一个运行器

@RunWith(JUnit4.class)就是指用JUnit4来运行

@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境

@RunWith(Suite.class)的话就是一套测试集合,


19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

@runWith注解起什么作用啊?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信