test 订阅
test,意为测试,在中学课本中有出现,一般都以“学科名称+test”的形式出现,如:English test,Chinese test等。还有一种解释是在软件中出现,一般用于检测软件好坏程度的单词当中。此单词通俗易懂,意思简单。 [1] 展开全文
test,意为测试,在中学课本中有出现,一般都以“学科名称+test”的形式出现,如:English test,Chinese test等。还有一种解释是在软件中出现,一般用于检测软件好坏程度的单词当中。此单词通俗易懂,意思简单。 [1]
信息
外文名
test
包    含
白盒测试、黑盒测试
词    性
名词
中文名
测试,考试
test定义
执行软件以验证其满足指定的需求并检测错误的过程。检测已有条件之间的不同,并评价软件项的特性软件项的分析过程。软件工程过程的一个活动,它将软件在预定的条件下运行以判断软件是否符合预期结果。软件工程中的测试主要包含:白盒测试、黑盒测试等。 [1] 
收起全文
精华内容
下载资源
问答
  • Testbench超全教程

    热门讨论 2013-07-27 00:24:00
    Test Bench 经典教程.pdf test bench.ppt Writing Testbenches using SystemVerilog.pdf Xilinx—Writing Efficient Testbenches.pdf 一些好的关于testbench资料// A Verilog HDL Test Bench Primer.pdf An ...
  • parasoft c++Test9.0破解

    千次下载 热门讨论 2012-03-18 16:41:02
    最好用的单元测试工具,除了这里你是找不到9.0版本的破解的。 ... 独立的版本破解: ... 把lic_client.jar复制到 ... c:\Program Files (x86)\Parasoft\Test\9.0\plugins\...这个是:plugins-c++Test For Visual Studio.7z
  • Parasoft c++Test9.0破解文件

    热门讨论 2012-03-18 17:04:53
    c:\Program Files (x86)\Parasoft\C++test for Visual Studio\9.0\plugins\ 这个目录中 把plugins-Test for Virsual Studio.7z 中的文件覆盖到 c:\Program Files (x86)\Parasoft\Test for Visual Studio\9.0\...
  • springboot test

    万次阅读 2019-03-21 15:16:57
    在src/main下建立UserService类,对其进行单于测试,生产其单元测试类(使用command+shift+T快捷键),生成的test类在src/test下 @Service public class UserService { public Integer ...

    前言

    mac上idea快捷键,command+shift+T根据类生成快捷键。

    对spring容器中的类做单元测试

    在src/main下建立UserService类,对其进行单于测试,生产其单元测试类(使用command+shift+T快捷键),生成的test类在src/test下

    @Service
    public class UserService {
    
        public Integer addUser(String username){
            System.out.println("user dao adduser [username="+username+"]");
            if(username == null){
                return 0;
            }
            return 1;
        }
    }
    

    springboot启动类:

    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class,args);
        }
    }
    

    测试类:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserServiceTest {
    
        @Autowired
        private UserService userService;
    
        @Test
        public void addUser() throws Exception {
            Assert.assertEquals(Integer.valueOf(1),userService.addUser("zhihao.miao"));
            Assert.assertEquals(Integer.valueOf(0),userService.addUser(null));
        }
    
    }
    

    盲点扫描

    RunWith注解,SpringRunner类,SpringJUnit4ClassRunner类,SpringBootTest注解的解释。
    在这里插入图片描述
    When a class is annotated with @RunWith or extends a class annotated with @RunWith, JUnit will invoke the class it references to run the tests in that class instead of the runner built into JUnit. We added this feature late in development. While it seems powerful we expect the runner API to change as we learn how people really use it. Some of the classes that are currently internal will likely be refined and become public.
    当一个类用@RunWith注释或继承一个用@RunWith注释的类时,JUnit将调用它所引用的类来运行该类中的测试而不是开发者去在junit内部去构建它。我们在开发过程中使用这个特性。
    For example, suites in JUnit 4 are built using RunWith, and a custom runner named Suite:
    比如说,suites使用RunWith注解构建,

    @RunWith(Suite.class)
    @SuiteClasses({ATest.class, BTest.class, CTest.class})
    public class ABCSuite {
    }
    

    在这里插入图片描述SpringRunner is an alias for the SpringJUnit4ClassRunner.
    SpringRunnerSpringJUnit4ClassRunner的一个别名。
    To use this class, simply annotate a JUnit 4 based test class with @RunWith(SpringRunner.class).
    使用这个类,简单注解一个JUnit 4 依赖的测试@RunWith(SpringRunner.class).
    If you would like to use the Spring TestContext Framework with a runner other than
    this one, use org.springframework.test.context.junit4.rules.SpringClassRule
    and org.springframework.test.context.junit4.rules.SpringMethodRule.
    如果你想使用Spring测试上下文而不是使用这个,你可以使用org.springframework.test.context.junit4.rules.SpringClassRuleorg.springframework.test.context.junit4.rules.SpringMethodRule.

    SpringJUnit4ClassRunner is a custom extension of JUnit’s
    BlockJUnit4ClassRunner which provides functionality of the
    Spring TestContext Framework to standard JUnit tests by means of the
    TestContextManager and associated support classes and annotations.
    SpringJUnit4ClassRunner是JUnit’s的BlockJUnit4ClassRunner类的一个常规扩展,提供了一些spring测试环境上下文去规范JUnit测试,意味着TestContextManager和支持相关的类和注解。
    在这里插入图片描述Annotation that can be specified on a test class that runs Spring Boot based tests.
    Provides the following features over and above the regular Spring TestContext
    Framework:
    注解制定了一个测试类运行了Spring Boot环境。提供了以下一些特性:
    Uses SpringBootContextLoader as the default ContextLoader when no specific ContextConfiguration#loader() @ContextConfiguration(loader=…) is defined.
    当没有特定的ContextConfiguration#loader()(@ContextConfiguration(loader=…))被定义那么就是SpringBootContextLoader作为默认的ContextLoader。
    Automatically searches for a SpringBootConfiguration @SpringBootConfiguration when nested @Configuration is not used, and no explicit #classes() classes are
    specified.
    自动搜索到SpringBootConfiguration注解的文件。
    Allows custom Environment properties to be defined using the properties() properties attribute}.
    允许自动注入Environment类读取配置文件。
    Provides support for different #webEnvironment() webEnvironment modes,
    including the ability to start a fully running container listening on a
    WebEnvironment#DEFINED_PORT defined or WebEnvironment#RANDOM_PORT
    random port.
    提供一个webEnvironment环境,可以完整的允许一个web环境使用随机的端口或者自定义的端口。
    Registers a org.springframework.boot.test.web.client.TestRestTemplate
    TestRestTemplate bean for use in web tests that are using a fully running container.
    注册了TestRestTemplate类可以去做接口调用。

    springboot测试步骤
    直接在测试类上面加上如下2个注解
    @RunWith(SpringRunner.class)
    @SpringBootTest
    就能取到spring中的容器的实例,如果配置了@Autowired那么就自动将对象注入。

    在测试环境中获取一个bean,在项目中新建User类,然后在测试模块进行测试
    在src/main下新建一个实例User

    @Component
    public class User {
    }
    

    src/test下创建测试类测试:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserTest {
    
    
        @Autowired
        public ApplicationContext context;
    
        @Test
        public void testNotNull(){
            Assert.assertNotNull(context.getBean(User.class));
        }
    }
    

    只在测试环境有效的bean

    在src/test下新建二个类,我们发现分别使用@TestComponent和@TestConfiguration二个注解修饰,这些类只在测试环境生效

    @TestComponent
    public class Cat {
    
        public void index(){
            System.out.println("cat index");
        }
    }
    
        @TestConfiguration
        public class TestBeanConfiguration {
        
            @Bean
            public Runnable createRunnable(){
                return () -> System.out.println("=====createRunnable=======");
            }
        }
    

    测试类:

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {TestBeanConfiguration.class,Cat.class})
    public class TestApplication {
    
        @Autowired
        public ApplicationContext context;
    
        @Test
        public void testNotNull(){
            Runnable runnable = context.getBean(Runnable.class);
            runnable.run();
            System.out.println("--------");
    
            Cat cat = context.getBean(Cat.class);
            cat.index();
        }
    }
    

    需要在@SpringBootTest注解的参数classes中加入参数,表示将某些类纳入测试环境的容器中。

    TestComponent注解TestConfiguration注解

    配置文件属性的读取

    springboot会只会读取到src/test/resources下的配置,不会读到正式环境下的配置文件(跟以前1.4.*版本的不一样,以前是优先读取测试环境配置文件,然后读取正式环境的配置)

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class EnvTest {
    
        @Autowired
        public Environment environment;
    
        @Test
        public void testValue(){
            Assert.assertEquals("zhihao.miao",environment.getProperty("developer.name"));
    
        }
    }
    

    除了在配置文件中设置属性,测试环境加载一些配置信息的二种方式:
    第一种是使用@SpringBootTest注解,注解参数properties指定其value值,第二种使用EnvironmentTestUtils.addEnvironment方法进行设置。
    测试:

    @RunWith(SpringRunner.class)
    @SpringBootTest(properties = {"app.version=1.0"})
    public class EnvTest2 {
    
        @Autowired
        private ConfigurableEnvironment environment;
    
        @Before
        public void init(){
            EnvironmentTestUtils.addEnvironment(environment,"app.admin.user=zhangsan");
        }
    
        @Test
        public void testApplication(){
            Assert.assertEquals("1.0",environment.getProperty("app.version"));
            Assert.assertEquals("zhangsan",environment.getProperty("app.admin.user"));
        }
    }
    

    Mock方式的测试

    正式环境只是一个接口,并没有实现,也并没有纳入spring容器进行管理。

    public interface UserDao {
        Integer createUser(String userName);
    }
    

    测试

    @RunWith(SpringRunner.class)
    public class UserDaoTest {
    
        //使用MockBean是因为此时容器中没有UserMapper这个对象
        @MockBean
        public UserDao userDao;
    
        //使用BDDMockito对行为进行预测,
        @Before
        public void init(){
            BDDMockito.given(userDao.createUser("admin")).willReturn(1);
            BDDMockito.given(userDao.createUser("")).willReturn(0);
            BDDMockito.given(userDao.createUser(null)).willThrow(NullPointerException.class);
        }
    
        @Test(expected=NullPointerException.class)
        public void testCreateUser() {
            Assert.assertEquals(Integer.valueOf(1),userDao.createUser("admin")) ;
            Assert.assertEquals(Integer.valueOf(0),userDao.createUser("")) ;
            Assert.assertEquals(Integer.valueOf(1),userDao.createUser(null)) ;
        }
    }
    

    对controller进行测试

    第一种方式:

    定义一个Controller,用作测试:

    @RestController
    public class UserController {
    
        private Logger logger = LoggerFactory.getLogger(getClass());
    
        @GetMapping("/user/home")
        public String home(){
            logger.info("user home");
            return "user home";
        }
    
        @GetMapping("/user/show")
        public String show(@RequestParam("id") String id){
            logger.info("book show");
            return "show"+id;
        }
    }
    

    使用浏览器访问

    http://localhost:8080/user/home
    http://localhost:8080/user/show?id=100
    

    使用测试类测试
    @RunWith(SpringRunner.class)
    //指定web环境,随机端口
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class UserControllerTest {

    //这个对象是运行在web环境的时候加载到spring容器中
    @Autowired
    private TestRestTemplate testRestTemplate;
    
    @Test
    public void testHome(){
        String context = testRestTemplate.getForObject("/user/home",String.class);
        Assert.assertEquals("user home",context);
    }
    
    @Test
    public void testShow(){
        String context = testRestTemplate.getForObject("/user/show?id=100",String.class);
        Assert.assertEquals("show10",context);
    }
    

    }

    第二种方式,使用@WebMvcTest注解

    @RunWith(SpringRunner.class)
    @WebMvcTest(controllers = UserController.class)
    public class UserControllerTest2 {
    
        @Autowired
        public MockMvc mockMvc;
    
        @Test
        public void testHome() throws Exception {
            mockMvc.perform(MockMvcRequestBuilders.get("/user/home")).andExpect(MockMvcResultMatchers.status().isOk());
            mockMvc.perform(MockMvcRequestBuilders.get("/user/home")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("user home"));
        }
    
        @Test
        public void testShow() throws Exception {
            mockMvc.perform(MockMvcRequestBuilders.get("/user/show").param("id", "400")).andExpect(MockMvcResultMatchers.status().isOk());
            mockMvc.perform(MockMvcRequestBuilders.get("/user/show").param("id", "400")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("show400"));
        }
    }
    

    WebMvcTest
    @WebMvcTest 不需要运行在web环境下,但是,需要指定controllers,表示需要测试哪些controllers。
    这种方式只测试controller,controller里面的一些依赖,需要你自己去mock
    @WebMvcTest 不会加载整个spring容器。

    第三种方式

    使用@SpringBootTest()与@AutoConfigureMockMvc结合,@SpringBootTest使用@SpringBootTest加载测试的spring上下文环境,@AutoConfigureMockMvc自动配置MockMvc这个类,

    /**
     * @SpringBootTest 不能和  @WebMvcTest 同时使用
     * 如果使用MockMvc对象的话,需要另外加上@AutoConfigureMockMvc注解
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest()
    @AutoConfigureMockMvc
    public class UserControllerTest3 {
    
        @Autowired
        private MockMvc mvc;
    
        @Test
        public void testHome() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/user/home")).andExpect(MockMvcResultMatchers.status().isOk());
            mvc.perform(MockMvcRequestBuilders.get("/user/home")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("user home"));
        }
    
        @Test
        public void testShow() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/user/show").param("id", "400")).andExpect(MockMvcResultMatchers.status().isOk());
            mvc.perform(MockMvcRequestBuilders.get("/user/show").param("id", "400")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("show400"));
        }
    }
    

    一个注解可以使测试类可以自动配置MockMvc这个类。
    AutoConfigureMockMvc注解

    展开全文
  • Testbench编写指南(1)基本组成与示例

    万次阅读 多人点赞 2018-08-24 17:06:43
    对于小型设计来说,最好的测试方式便是使用TestBench和HDL仿真器来验证其正确性。一般TestBench需要包含这些部分:实例化待测试设计、使用测试向量激励设计、将结果输出到终端或波形窗口便于可视化观察、比较实际...

    对于小型设计来说,最好的测试方式便是使用TestBench和HDL仿真器来验证其正确性。一般TestBench需要包含这些部分:实例化待测试设计、使用测试向量激励设计、将结果输出到终端或波形窗口便于可视化观察、比较实际结果和预期结果。下面是一个标准的HDL验证流程:
    这里写图片描述
    TestBench可以用VHDL或Verilog、SystemVerilog编写,本文以Verilog HDL为例。FPGA设计必须采用Verilog中可综合的部分子集,但TestBench没有限制,任何行为级语法都可以使用。本文将先介绍TestBench中基本的组成部分。


    生成时钟信号

    使用系统时钟的设计在TestBench中必须要生成时钟信号,该功能实现起来也非常简单,示例代码如下:

    parameter ClockPeriod =  10;
    
    //方法1
    initial begin
        forever clock = #(ClockPeriod/2) ~ Clock;
    end
    
    //方法2
    initial begin
        always #(ClockPeriod/2) Clock = ~Clock;
    end     

    生成测试激励

    只有给设计激励数据,才能得到验证结果。提供激励的方法有两种,绝对时间激励以仿真时刻0为基准,给信号赋值,示例如下:

    initial begin
        reset = 1;
        load = 0;
        count = 0;
        #100 reset = 0;
        #20 load = 1;
        #20 count = 1;
    end

    ‘#’用于指定等待的延迟时间,之后才会执行下一个激励。相对时间激励给信号一个初始值,直到某一事件发生后才触发激励赋值,示例如下:

    always @ (posedge clk)
        tb_cnt <= tb_cnt + 1;
    
    initial begin
        if (tb_cnt <= 5) begin
            reset = 1;
            load = 0;
            count = 0;
        end
        else begin
            reset = 0;
            load = 1;
            count = 1;
        end
    end

    根据需要,可以同时使用两种方法。每一个initial块、always块之间都是并行工作的关系,但在initial块内部是顺序地处理事件。因此复杂的激励序列应该分散到多个initial或always块中,以提高代码可读性和可维护性。


    显示结果

    Verilog中可以使用$display和$monitor系统任务来显示仿真结果,示例代码如下:

    initial begin
        $timeformat(-9, 1, "ns", 12);
        $display("    Time clk rst ld sftRg data sel");
        $monitor("%t %b %b %b %b %b %b", $realtime,
                clock, reset, load, shiftreg, data, sel);
    end

    $display会将双引号之间的文本输出到终端窗口。$monitor的输出为事件驱动型,如上例中$realtime变量用于触发信号列表的显示,%t表示$realtime以时间格式输出,%b表示其余值以二进制格式输出。其余还有%d、%h、%o等与惯例相同。


    简单示例

    下面是一个简单的移位寄存器Verilog设计示例:

    module shift_reg (clock, reset, load, sel, data, shiftreg);
    input clock;
    input reset;
    input load;
    input [1:0] sel;
    input [4:0] data;
    output [4:0] shiftreg;
    reg [4:0] shiftreg;
    
    always @ (posedge clock)
    begin
        if (reset)
            shiftreg = 0;
        else if (load)
            shiftreg = data;
        else
            case (sel)
                2'b00 : shiftreg = shiftreg;
                2'b01 : shiftreg = shiftreg << 1;
                2'b10 : shiftreg = shiftreg >> 1;
                default : shiftreg = shiftreg;
            endcase
    end
    endmodule

    下面给出上述设计的TestBench示例:

    module testbench; // 申明TestBench名称
    reg clock;
    reg load;
    reg reset; // 申明信号
    wire [4:0] shiftreg;
    reg [4:0] data;
    reg [1:0] sel;
    
    // 申明移位寄存器设计单元
    shift_reg dut(.clock (clock),
        .load (load),
        .reset (reset),
        .shiftreg (shiftreg),
        .data (data),
        .sel (sel));
    
    initial begin   // 建立时钟
        clock = 0;
        forever #50 clock = ~clock;
    end
    
    initial begin   // 提供激励
        reset = 1;
        data = 5'b00000;
        load = 0;
        sel = 2'b00;
        #200
        reset = 0;
        load = 1;
        #200
        data = 5'b00001;
        #100
        sel = 2'b01;
        load = 0;
        #200
        sel = 2'b10;
        #1000 $stop;
    end
    
    initial begin   // 打印结果到终端
        $timeformat(-9,1,"ns",12);
        $display(" Time Clk Rst Ld SftRg Data Sel");
        $monitor("%t %b %b %b %b %b %b", $realtime,
        clock, reset, load, shiftreg, data, sel);
    end
    endmodule

    TestBench中包括实例化设计、建立时钟、提供激励、终端显示几个部分。每个initial块之间都从0时刻开始并行执行。$stop用来指示仿真器停止TestBench仿真(建议每个TestBench中都有至少一个$stop)。$monitor会在终端以ASCII格式打印监测结果。


    设计规则

    下面给出一些编写TestBench的基本设计规则:

    • 了解仿真器特性:不同的仿真器由不同的特性、能力和性能差异,可能会产生不同的仿真结果。仿真器可分为两类:(1).基于事件,当输入、信号或门的值改变时调度仿真器事件,有最佳的时序仿真表现;(2).基于周期,在每个时钟周期优化组合逻辑和分析结果,比前者更快且内存利用效率高,但时序仿真结果不准确。即使是基于事件的仿真器,在调度事件时采用不同的算法也会影响到仿真性能(比如同一仿真时刻发生了多个事件,仿真器需要按一定的序列依次调度每个事件)。了解仿真器特性有一定必要,但目前最常用的ModelSim、Vivado Simulator等仿真器也已经非常强大。
    • 避免使用无限循环:仿真器调度事件时,会增加CPU和内存的使用率,仿真进程也会变慢。因此除非迫不得已(比如利用forever生成时钟信号),尽量不要使用无限循环。
    • 将激励分散到多个逻辑块中:Verilog中的每个initial块都是并行的,相对于仿真时刻0开始运行。将不相关的激励分散到独立的块中,在编写、维护和更新testbench代码时会更有效率。
    • 避免显示不重要的数据:对于大型设计来说,会有超过10万个事件和大量的信号,显示大量数据会极度拖慢仿真速度。因此最好的做法是每隔N个时钟周期显示重要信号的数据,以保证足够的仿真速度。
    展开全文
  • 解决matlab 2014b的Test checkout of feature 'Compiler' failed

    千次下载 热门讨论 2016-05-24 20:13:07
    解决matlab 2014b的Test checkout of feature 'Compiler' failed. 以上错误据说是因为2014b破解不完全引起的。
  • SpringBoot test

    万次阅读 2018-12-04 09:59:21
    前言 mac上idea快捷键,command+shift+T根据类生成快捷键。...在src/main下建立UserService类,对其进行单于测试,生产其单元测试类(使用command+shift+T快捷键),生成的test类在src/test下 @Servi...

    原文地址:https://www.jianshu.com/p/72b19e24a602

    前言

    mac上idea快捷键,command+shift+T根据类生成快捷键。

    对spring容器中的类做单元测试

    在src/main下建立UserService类,对其进行单于测试,生产其单元测试类(使用command+shift+T快捷键),生成的test类在src/test下

    @Service
    public class UserService {
    
        public Integer addUser(String username){
            System.out.println("user dao adduser [username="+username+"]");
            if(username == null){
                return 0;
            }
            return 1;
        }
    }
    

    springboot启动类:

    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class,args);
        }
    }
    

    测试类:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserServiceTest {
    
        @Autowired
        private UserService userService;
    
        @Test
        public void addUser() throws Exception {
            Assert.assertEquals(Integer.valueOf(1),userService.addUser("zhihao.miao"));
            Assert.assertEquals(Integer.valueOf(0),userService.addUser(null));
        }
    
    }
    

    盲点扫描

    RunWith注解,SpringRunner类,SpringJUnit4ClassRunner类,SpringBootTest注解的解释。

    RunWith注解

    When a class is annotated with @RunWith or extends a class annotated with @RunWith, JUnit will invoke the class it references to run the tests in that class instead of the runner built into JUnit. We added this feature late in development. While it seems powerful we expect the runner API to change as we learn how people really use it. Some of the classes that are currently internal will likely be refined and become public.
    当一个类用@RunWith注释或继承一个用@RunWith注释的类时,JUnit将调用它所引用的类来运行该类中的测试而不是开发者去在junit内部去构建它。我们在开发过程中使用这个特性。

    For example, suites in JUnit 4 are built using RunWith, and a custom runner named Suite:
    比如说,suites使用RunWith注解构建,

    @RunWith(Suite.class)
    @SuiteClasses({ATest.class, BTest.class, CTest.class})
    public class ABCSuite {
    }
    

    SpringRunner注解

    SpringRunner is an alias for the SpringJUnit4ClassRunner.
    SpringRunnerSpringJUnit4ClassRunner的一个别名。

    To use this class, simply annotate a JUnit 4 based test class with @RunWith(SpringRunner.class).
    使用这个类,简单注解一个JUnit 4 依赖的测试@RunWith(SpringRunner.class).

    If you would like to use the Spring TestContext Framework with a runner other than
    this one, use org.springframework.test.context.junit4.rules.SpringClassRule
    and org.springframework.test.context.junit4.rules.SpringMethodRule.
    如果你想使用Spring测试上下文而不是使用这个,你可以使用org.springframework.test.context.junit4.rules.SpringClassRuleorg.springframework.test.context.junit4.rules.SpringMethodRule.

    SpringJUnit4ClassRunner

    SpringJUnit4ClassRunner is a custom extension of JUnit's
    BlockJUnit4ClassRunner which provides functionality of the
    Spring TestContext Framework to standard JUnit tests by means of the
    TestContextManager and associated support classes and annotations.
    SpringJUnit4ClassRunner是JUnit's的BlockJUnit4ClassRunner类的一个常规扩展,提供了一些spring测试环境上下文去规范JUnit测试,意味着TestContextManager和支持相关的类和注解。

    SpringBootTest注解

    Annotation that can be specified on a test class that runs Spring Boot based tests.
    Provides the following features over and above the regular Spring TestContext
    Framework:
    注解制定了一个测试类运行了Spring Boot环境。提供了以下一些特性:

    Uses SpringBootContextLoader as the default ContextLoader when no specific ContextConfiguration#loader() @ContextConfiguration(loader=...) is defined.
    当没有特定的ContextConfiguration#loader()(@ContextConfiguration(loader=...))被定义那么就是SpringBootContextLoader作为默认的ContextLoader。

    Automatically searches for a SpringBootConfiguration @SpringBootConfiguration when nested @Configuration is not used, and no explicit #classes() classes are
    specified.
    自动搜索到SpringBootConfiguration注解的文件。

    Allows custom Environment properties to be defined using the properties() properties attribute}.
    允许自动注入Environment类读取配置文件。

    Provides support for different #webEnvironment() webEnvironment modes,
    including the ability to start a fully running container listening on a
    WebEnvironment#DEFINED_PORT defined or WebEnvironment#RANDOM_PORT
    random port.
    提供一个webEnvironment环境,可以完整的允许一个web环境使用随机的端口或者自定义的端口。

    Registers a org.springframework.boot.test.web.client.TestRestTemplate
    TestRestTemplate bean for use in web tests that are using a fully running container.
    注册了TestRestTemplate类可以去做接口调用。

    springboot测试步骤

    • 直接在测试类上面加上如下2个注解
      @RunWith(SpringRunner.class)
      @SpringBootTest
      就能取到spring中的容器的实例,如果配置了@Autowired那么就自动将对象注入。

    在测试环境中获取一个bean,在项目中新建User类,然后在测试模块进行测试

    在src/main下新建一个实例User

    @Component
    public class User {
    }
    

    src/test下创建测试类测试:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserTest {
    
    
        @Autowired
        public ApplicationContext context;
    
        @Test
        public void testNotNull(){
            Assert.assertNotNull(context.getBean(User.class));
        }
    }
    

    只在测试环境有效的bean

    在src/test下新建二个类,我们发现分别使用@TestComponent和@TestConfiguration二个注解修饰,这些类只在测试环境生效

    @TestComponent
    public class Cat {
    
        public void index(){
            System.out.println("cat index");
        }
    }
    
    @TestConfiguration
    public class TestBeanConfiguration {
    
        @Bean
        public Runnable createRunnable(){
            return () -> System.out.println("=====createRunnable=======");
        }
    }
    

    测试类:

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {TestBeanConfiguration.class,Cat.class})
    public class TestApplication {
    
        @Autowired
        public ApplicationContext context;
    
        @Test
        public void testNotNull(){
            Runnable runnable = context.getBean(Runnable.class);
            runnable.run();
            System.out.println("--------");
    
            Cat cat = context.getBean(Cat.class);
            cat.index();
        }
    }
    

    需要在@SpringBootTest注解的参数classes中加入参数,表示将某些类纳入测试环境的容器中。

    TestComponent注解

    TestConfiguration注解

    配置文件属性的读取

    springboot会只会读取到src/test/resources下的配置,不会读到正式环境下的配置文件(跟以前1.4.*版本的不一样,以前是优先读取测试环境配置文件,然后读取正式环境的配置)

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class EnvTest {
    
        @Autowired
        public Environment environment;
    
        @Test
        public void testValue(){
            Assert.assertEquals("zhihao.miao",environment.getProperty("developer.name"));
    
        }
    }
    

    除了在配置文件中设置属性,测试环境加载一些配置信息的二种方式:
    第一种是使用@SpringBootTest注解,注解参数properties指定其value值,第二种使用EnvironmentTestUtils.addEnvironment方法进行设置。
    测试:

    @RunWith(SpringRunner.class)
    @SpringBootTest(properties = {"app.version=1.0"})
    public class EnvTest2 {
    
        @Autowired
        private ConfigurableEnvironment environment;
    
        @Before
        public void init(){
            EnvironmentTestUtils.addEnvironment(environment,"app.admin.user=zhangsan");
        }
    
        @Test
        public void testApplication(){
            Assert.assertEquals("1.0",environment.getProperty("app.version"));
            Assert.assertEquals("zhangsan",environment.getProperty("app.admin.user"));
        }
    }
    
    

    Mock方式的测试

    正式环境只是一个接口,并没有实现,也并没有纳入spring容器进行管理。

    public interface UserDao {
        Integer createUser(String userName);
    }
    

    测试

    @RunWith(SpringRunner.class)
    public class UserDaoTest {
    
        //使用MockBean是因为此时容器中没有UserMapper这个对象
        @MockBean
        public UserDao userDao;
    
        //使用BDDMockito对行为进行预测,
        @Before
        public void init(){
            BDDMockito.given(userDao.createUser("admin")).willReturn(1);
            BDDMockito.given(userDao.createUser("")).willReturn(0);
            BDDMockito.given(userDao.createUser(null)).willThrow(NullPointerException.class);
        }
    
        @Test(expected=NullPointerException.class)
        public void testCreateUser() {
            Assert.assertEquals(Integer.valueOf(1),userDao.createUser("admin")) ;
            Assert.assertEquals(Integer.valueOf(0),userDao.createUser("")) ;
            Assert.assertEquals(Integer.valueOf(1),userDao.createUser(null)) ;
        }
    }
    

    对controller进行测试

    第一种方式:
    定义一个Controller,用作测试:

    @RestController
    public class UserController {
    
        private Logger logger = LoggerFactory.getLogger(getClass());
    
        @GetMapping("/user/home")
        public String home(){
            logger.info("user home");
            return "user home";
        }
    
        @GetMapping("/user/show")
        public String show(@RequestParam("id") String id){
            logger.info("book show");
            return "show"+id;
        }
    }
    

    使用浏览器访问

    http://localhost:8080/user/home
    http://localhost:8080/user/show?id=100
    

    使用测试类测试

    @RunWith(SpringRunner.class)
    //指定web环境,随机端口
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class UserControllerTest {
    
        //这个对象是运行在web环境的时候加载到spring容器中
        @Autowired
        private TestRestTemplate testRestTemplate;
    
        @Test
        public void testHome(){
            String context = testRestTemplate.getForObject("/user/home",String.class);
            Assert.assertEquals("user home",context);
        }
    
        @Test
        public void testShow(){
            String context = testRestTemplate.getForObject("/user/show?id=100",String.class);
            Assert.assertEquals("show10",context);
        }
    }
    

    第二种方式,使用@WebMvcTest注解

    @RunWith(SpringRunner.class)
    @WebMvcTest(controllers = UserController.class)
    public class UserControllerTest2 {
    
        @Autowired
        public MockMvc mockMvc;
    
        @Test
        public void testHome() throws Exception {
            mockMvc.perform(MockMvcRequestBuilders.get("/user/home")).andExpect(MockMvcResultMatchers.status().isOk());
            mockMvc.perform(MockMvcRequestBuilders.get("/user/home")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("user home"));
        }
    
        @Test
        public void testShow() throws Exception {
            mockMvc.perform(MockMvcRequestBuilders.get("/user/show").param("id", "400")).andExpect(MockMvcResultMatchers.status().isOk());
            mockMvc.perform(MockMvcRequestBuilders.get("/user/show").param("id", "400")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("show400"));
        }
    }
    

    WebMvcTest

    @WebMvcTest 不需要运行在web环境下,但是,需要指定controllers,表示需要测试哪些controllers。
    这种方式只测试controller,controller里面的一些依赖,需要你自己去mock
    @WebMvcTest 不会加载整个spring容器。

    第三种方式
    使用@SpringBootTest()与@AutoConfigureMockMvc结合,@SpringBootTest使用@SpringBootTest加载测试的spring上下文环境,@AutoConfigureMockMvc自动配置MockMvc这个类,

    /**
     * @SpringBootTest 不能和  @WebMvcTest 同时使用
     * 如果使用MockMvc对象的话,需要另外加上@AutoConfigureMockMvc注解
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest()
    @AutoConfigureMockMvc
    public class UserControllerTest3 {
    
        @Autowired
        private MockMvc mvc;
    
        @Test
        public void testHome() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/user/home")).andExpect(MockMvcResultMatchers.status().isOk());
            mvc.perform(MockMvcRequestBuilders.get("/user/home")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("user home"));
        }
    
        @Test
        public void testShow() throws Exception {
            mvc.perform(MockMvcRequestBuilders.get("/user/show").param("id", "400")).andExpect(MockMvcResultMatchers.status().isOk());
            mvc.perform(MockMvcRequestBuilders.get("/user/show").param("id", "400")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("show400"));
        }
    }
    

    一个注解可以使测试类可以自动配置MockMvc这个类。

     

     

    展开全文
  • 一看提示了@SpringBootTest Canot resolve symbol 'SpringBootTest', 第一反应是不是没有添加依赖包,查看pom.xml,里面已经有添加的包了, <dependency> <groupId>org.springframework.boot<.

    最近在开发中总是遇到一些奇奇怪怪的问题,都是一些不大不小的事情,

    有一个开发同事反馈,在使用Spring Boot创建单元测试的时候,无论怎么弄都提示注解不存在,如下:

    一看提示了 @SpringBootTest Canot resolve symbol 'SpringBootTest',

    第一反应是不是没有添加依赖包,查看pom.xml,里面已经有添加的包了,

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    第二反应是不是哪里写错了代码,把其它项目成功的测试代码拷贝过来试试,结果拷贝过来之后,import引用也是灰色的
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;

    第三反应是不是没有编译引用,maven编译一波,还是没有解决,然后查看依赖包以及里面的类,什么包类都有啊,一个不差啊!

    这个神奇了,堂堂超神级别的工程师,从来没有遇到这么弱的问题!就不信搞不定它,继续排查,

    好家伙,总算找到问题了,

    原来是这小伙把单元测试例子写在了/src/main/java/目录下,导致了无法引用spring-boot-starter-test的测试类,

    解决方法有两种,

    第一种,将spring-boot-starter-test的作用范围<scope>去掉,这样所有周期范围就都可以使用到了。

    第二种,mave依赖不变,将单元测试代码放在/src/test/java/目录下,这样springboot会自动识别到这是测试目录。

    通过以上两种方法可以解决@SpringBootTest Canot resolve symbol 'SpringBootTest',类引入不了的问题。

    推荐使用第二种!

    展开全文
  • 题目:Friedman test以及后续检验Nemenyi test和Bonferroni-Dunn test 在做算法对比时,往往需要对实验结果进行统计检验。Friedman test是一种常用的检验,用来比较k个算法在N个数据集上的整体表现性能。但Friedman...
  • If you are using JUnit 4, don’t forget to also add @RunWith(SpringRunner.class) to your test, otherwise the annotations will be ignored. If you are using JUnit 5, there’s no need to add the ...
  • Java Unit Test - Junit

    万次阅读 2019-06-27 00:11:19
    Java Unit Test - Junit4.1.2 Java单元测试
  • unittest之TestSuite类详解

    万次阅读 2018-08-15 18:50:12
    TestSuite 测试套件类,如何理解测试套件这个概念呢,从它的类定义来看,可以理解为:多个独立的测试用例(test case)或者多个独立的测试套件(test suite,可以理解为子套件)可以构成一个测试套件,那么我们写好...
  • 把lic_client.jar复制到c:\Program Files (x86)\Parasoft\Test\9.0\plugins\com.parasoft.xtest.libs_9.0.0.20100729\Parasoft\ 这个目录下覆盖原始文件. 运行后随便输入几个注册码 可以成功。
  • eNetTest 网管内网单机测速工具

    热门讨论 2014-04-02 13:58:35
    eNetTest 网管内网单机测速工具
  • gtest Test_F 和Test 区别

    千次阅读 2018-06-04 15:25:29
    一般来说简单的测试用TEST简单测试TESTCpp代码#include &lt;gtest/gtest.h&gt; int Factorial( int n ) { if(n==2) return 100; //故意出个错,嘻嘻 return n&lt;=0? 1 : n*Factorial(n - 1); } /...
  • Sublime Test 3 Package Control

    千次下载 热门讨论 2016-09-27 21:52:18
    Sublime Test 3 Package Control
  • GoogleTest测试框架介绍(二)

    万次阅读 多人点赞 2019-01-03 20:09:29
    本系列文章主要介绍 GoogleTest(也称“GTest”)测试框架的相关知识,同时通过一些示例程序介绍 GoogleTest 测试框架的使用方法。 本文为系列文章的第二篇,主要通过一些示例程序介绍 GoogleTest 测试框架的使用...
  • spring-test.jar

    千次下载 热门讨论 2010-08-27 15:12:24
    spring-test.jar 单独下这个的很少,因为他就在spring-framework-2.5.5.zip里,只要你下有spring2.5。 spring 官方下载地址: http://www.springsource.com/download/
  • AndroidStudio androidTest安卓测试 test单元测试(Junit)

    万次阅读 热门讨论 2018-12-14 16:54:46
    androidTest是整合测试,可以运行在设备或虚拟设备上,需要编译打包为APK在设备上运行,可以实时查看细节 test 是单元测试,运行在本地开发机上,可以脱离Android运行环境,速度快 Android Studio 测试分 android...
  • TESTTEST_F 区别

    万次阅读 2016-11-20 16:50:02
    #include  int Factorial( int n )  {  if(n==2) return 100;... TEST(TestFactorial, ZeroInput) //第一个参数是测试用例名,第二个参数是测试名:随后的测试结果将以"测试用例名.测试名"的形式给出  {  E
  • Friedman test和Nemenyi test

    千次阅读 2019-09-30 10:32:54
    Friedman test和Nemenyi test (1)Friedman test分别对每个数据集的算法进行排序,最优算法的排序(rank)为1,次优算法的排序为2…,在排名相同时,指定平均排序(average ranks)。 令 表示第j个算法(1≤j≤k )...
  • cmake + googletest 之一 入门

    千次阅读 2019-06-04 13:17:41
    一: 环境 OS: Ubuntu 18.04 CMAKE: 3.14.5 GTest: 1.8.1 注意: 不涉及如何安装 CMAKE 了, 相信看到这篇文章的你一定已经安装好了. ...二: 安装 GTest ( google test ) GTest 的 github 地址: https://github....
  • GTest源码剖析(四)——TEST_P宏

    千次阅读 2017-09-17 23:13:42
    GTest源码剖析——TEST_P宏GTest源码剖析TEST_P宏 TEST_P宏用法 TestWithParam 类 1 TestWithParam 类定义 2 WithParamInterface 模版类定义 INSTANTIATE_TEST_CASE_P宏 1 INSTANTIATE_TEST_CASE_P宏展开 2 参数生成...
  • go test执行当前项目所有test

    千次阅读 2019-10-30 16:34:56
    运行当前目录及所有子目录下的测试用例 ...go test ./... 运行指定目录及所有子目录下的测试用例 go test foo/... 运行指定前缀的测试用例 go test foo... 运行GOPATH下的所有测试用例 go test ... ...
  • @Test注解

    千次阅读 2019-07-31 11:13:07
    @Test 注解是TestNG的核心注解,被打上该注解的方法,表示为一个测试方法。 1.语法 @Test(param1 = ..., param2 = ...) 参数常见取值 alwaysRun : 如果=true,表示即使该测试方法所依赖的前置测试有失败的情况,也...
  • 汇编语言Test指令

    万次阅读 多人点赞 2020-11-22 21:56:59
    目录功能简介作用详细说明应用举例 ...TEST AX,BX 与AND AX,BX命令有相同效果,只是Test指令不改变AX和BX的内容,而AND指令会把结果保存到AX中。 作用详细说明 将两个操作数进行按位AND,设结果是TE
  • Unit test(单元测试):针对每一个单独的代码块进行测试。当它失败的时候会告诉你你的哪块代码有问题需要去修复。 Integration test(集成测试):将多个模块结合在一起进行测试,确保多个组件可以正确交互。当它...
  • BurnInTest测试固态硬盘详解

    万次阅读 2019-03-05 16:23:45
    一.测试配置 1.测试模式 ...在每个循环过程中(不包括Butterfly seeking和Quick physical drive test)BurnInTest将在硬盘中创建一个文件,并进行比较。 • Default (Cyclic) • Sequential data ...
  • Python之 sklearn:sklearn中的train_test_split函数的简介及使用方法之详细攻略 目录 sklearn中的train_test_split函数的简介 train_test_split使用方法 1、基础用法 sklearn中的train_test_split...
  • springboot使用@SpringBootTest注解进行单元测试

    万次阅读 多人点赞 2019-02-20 22:18:59
    @SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解。基本用法如下: 1.添加依赖: &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,317,253
精华内容 2,526,901
关键字:

test