先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
正文
前言
昨天被师兄问起程序单元测试的问题, 顿时一脸懵逼, 啥? 单元测试. 折腾了一天, 用Unity好歹撸出来一个HelloWorld级别的LED单元测试, 下面记录下过程, 感觉好久不写博客了, 竟有种无法下笔的感觉, 还是从这篇慢慢拾起来吧.
STM32CubeMX
先用STM32CubeMX 5.6.1建一个工程:
- MCU选择: 打开
STM32CubeMX
, 点击ACCESS TO MCU SELECTOR
, 选择STM32F767VITx
- 调试端口配置为SWD:
Pinout & Configuration
->System Core
->SYS
->Debug
选择Serial Wire
Pinout & Configuration
->System Core
->RCC
->HSE
选择Crystal/Ceramic Resonator
(外部用的25M晶振)- Clock Configuration:
- 配置LED(PD12接LED, 低电平点亮): 单击PD12引脚, 设为GPIO_Output, 然后右键PD12, 选择Enter User Label, 输入LEDR:
- 配置串口(Unity测试结果可以通过串口打印出来, 这里用USART3):
Pinout & Configuration
->Connectivity
->USART3
,Mode
选择Asynchronous
, 波特率默认115200, 引脚我挪到了板子上对应的PD8,PD9:
Project Manager
->Project
->Browse
选择工程位置(Project Location
), 填入工程名(Project Name
),Toolchain/IDE
选择MDK-ARM
.
Project Manager
->Code Generator
-> 勾选Copy only the necessary library files
, 还有Generate peripheral initialization as a pair of .c/.h files per periphral
- 点击右上角
GENERATE CODE
按钮生成代码, 打开工程. - Keil 点击魔术棒或者
Project
->Options for Target ...
, 默认配置Debug
为ST-link Debugger
, 点击Setting
->Flash Download
-> 勾选Reset and Run
, 点击Pack去掉Enable(听说是新版Keil的锅?) 这样下载后可以自动复位运行.
添加功能代码
gpio.c
的最下面添加led_on()和led_off()两个函数:
/* USER CODE BEGIN 2 */
GPIO_PinState led_on(void)
{
HAL_GPIO_WritePin(LEDR_GPIO_Port, LEDR_Pin, GPIO_PIN_RESET);
return HAL_GPIO_ReadPin(LEDR_GPIO_Port, LEDR_Pin);
}
GPIO_PinState led_off(void)
{
HAL_GPIO_WritePin(LEDR_GPIO_Port, LEDR_Pin, GPIO_PIN_SET);
return HAL_GPIO_ReadPin(LEDR_GPIO_Port, LEDR_Pin);
}
/* USER CODE END 2 */
在gpio.h
声明一下:
/* USER CODE BEGIN Prototypes */
extern GPIO_PinState led_on(void);
extern GPIO_PinState led_off(void);
/* USER CODE END Prototypes */
为了支持printf, 直接在usart.c
的最下面添加串口的重定向:
/* USER CODE BEGIN 1 */
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to ‘Yes’) calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
/* USER CODE END 1 */
在main.h添加头文件:
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include “gpio.h”
/* USER CODE END Includes */
在main.c的while(1)里面先测试一下:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
led_on();
HAL_Delay(1000);
led_off();
HAL_Delay(300);
printf(“hahage\r\n”);
}
/* USER CODE END 3 */
编译下载, 发现LED闪烁状态正确, 串口115200-8-N-1打印正常.
加入Unity单元测试
这里仅以测试上面的led_on()和led_off()两个函数为例. (为什么都看到灯亮了还测试, 咳咳, 人艰不拆…).
到 Unity Github把master下载下来, 可以git clone https://github.com/ThrowTheSwitch/Unity.git
, 也可以直接下载zip包:
拷贝从GitHub上拉下来的以下几个文件到上面STM32工程的 /Drivers/Unity
(新建的)文件夹里:
Unity/src/unity.c
Unity/src/unity.h
Unity/src/unity_internals.h
Unity/src/unity_config.h
打开Keil工程, 点击工程管理按钮, 新添Target: UnitTest
, 并点击Set as Current Target
按钮, 新添Groups: Drivers/Unity
, 然后点击Add Files
按钮, 把/Drivers/Unity
目录下的unity.c
添加进来:
魔术棒这里还是要再配置一下的:
接下来把头文件路径包含进来:
Drivers/Unity Group添加新文件main1.c, 把main.c的所有内容拷贝到main1.c, 然后main.c右键:
去掉Include in Target Build
勾选, 这样UnitTest
这个Target就不会编译main.c这个文件了:
Drivers/Unity Group添加新文件test_gpio.c
, 添加以下内容:
#include “gpio.h”
#include “unity.h”
void setUp(void)
{
}
void tearDown(void)
{
}
void test_led_on(void)
{
TEST_ASSERT_EQUAL(GPIO_PIN_RESET, led_on());
TEST_ASSERT_EQUAL(GPIO_PIN_RESET, led_on());
}
void test_led_off(void)
{
TEST_ASSERT_EQUAL(GPIO_PIN_SET, led_off());
TEST_ASSERT_EQUAL(GPIO_PIN_SET, led_off());
}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
止,不再深入研究,那么很难做到真正的技术提升。**
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-UPkBiLiF-1713421805874)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!