• 单元测试


    被测系统(System Under Test,SUT):正在被测试的系统。

    测试替身:

    测试夹具:测试运行程序(test runner)会在测试方法之前自动进行初始化、资源回收的工作。

    测试套件(test suite):

    一个测试用例可以包含多个打上@Test注解的测试方法。

    一、TestNG

    TestNG是一种基于注解的测试框架。其生命周期为:类级初始化资源处理、方法级初始化资源处理、执行测试用例中的方法、方法级销毁资源处理、类级销毁资源处理。其中类级的资源处理在一个测试用例中执行一次。方法级的资源处理在每个方法中都运行一次。

    如果在一个测试用例中有多个初始化方法,运行时先执行最后面的初始化方法,然后往前一个个运行。对于多个销毁资源的方法,按照顺序一个个运行。

    public class TestNG {
        private User user;
    
        @Before
        public void before() {
            System.out.println("before method----------");
            user = null;
        }
        @Before
        public void before2() {
            System.out.println("before method2----------");
            user = null;
        }
    
    
        @After
        public void after() {
            System.out.println("after method---------");
        }
    
        @BeforeClass
        public static void beforeClass() {
            System.out.println("before class----------");
        }
    
        @AfterClass
        public static void afterClass() {
            System.out.println("after class---------");
        }
    
    
        @Test
        public void test1() {
            System.out.println(1);
        }
    
    
        @Test
        public void test2() {
            System.out.println(2);
        }
    
        @Test
        public void test3() {
            System.out.println(3);
        }
    
    
        // 10毫秒
        @Test(timeout = 10,expected = NullPointerException.class)
        public void testNull() {
            Assert.assertNotNull(user.getUserRealName());
            System.out.println(user.getUserRealName());
        }
    
        @Test
        public void test() {
            boolean flag = 1 > 2;
            assert flag : "flag is false";
        }
    }
    

      

    二、模拟利器Mockito

    对于final类、匿名类和java的基本类型无法进行mock。

    创建Mock对象:mock(Class<T>)和 @Mock注解。 

    设定Mock对象的期望行为和返回值:

    when(mock.someMethod()).thenReturn(value); 

    doReturn(value).when(mock).someMethod();

    doNothing(value).when(mock).someMethod();

    验证交互行为:verify(mock,atLeast(2)).someMethod();

    public class MockitoTest {
        IUserService mockUserService = mock(IUserService.class); // 对接口模拟对象
        UserServiceImpl mockUserServiceImpl = mock(UserServiceImpl.class); // 对类模拟对象
    
        @Mock
        User user; // 基于注解模拟类
    
        @Before
        public void initMocks() {
            // 初始化所有@Mock注解模拟对象
            MockitoAnnotations.initMocks(this);
        }
    
        @Test
        public void testMock() {
            when(mockUserService.getUserByNameAndPwd("tom","111")).thenReturn(
                    new User("tom","111","tom","male",20)
            );
            User u=mockUserService.getUserByNameAndPwd("tom","111");
            Assert.assertNotNull(u);
            Assert.assertEquals(u.getUserRealName(),"tom");
    
            when(user.getAge()).thenReturn(30);
            Assert.assertEquals(user.getAge().longValue(),30l); 
         verify(mockUserService).getUserByNameAndPwd("tom","111");
         verify(mockUserService,atLeastOnce()).getUserByNameAndPwd("tom","111");
    } }

    三、测试整合之王Unitils

                               

  • 相关阅读:
    为什么网站不被百度收录或收录清零?
    XmlSerializer序列化一组成员到文本文件
    windows phone不同页面间传值
    windows phone下进行Isolated的IO读写
    windows Phone 后退键历史的清除
    Window Phone ListBox的DataBinding:
    VGA的相关代码
    如何避免Quartus II自動將未宣告的信號視為wire?
    XINLINX约束心得
    VIM配置文件备份
  • 原文地址:https://www.cnblogs.com/esther-qing/p/7919117.html
Copyright © 2020-2023  润新知