先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
正文
您的项目配置(例如,pom.xml对于Maven项目)必须包括所有必需的依赖项,并且它们都必须已经构建或下载(例如,通过mvn clean install对Maven项目进行构建)。
JUnit始终是必需的依赖项。
如果它们是您项目的可传递依赖项,则可能需要下面列出的依赖项。
如果这些依赖关系中的一种是必需的,但是缺少,则会为某些类生成测试,而不会为其他类生成测试。
一条消息将出现在事件日志中,指示缺少依赖项。
请注意,您只能在一个项目上运行Cover IntelliJ插件的一个实例。不支持在同一项目上运行多个实例。
4、安装Cover IntelliJ插件
如果您不是直接从JetBrains市场安装,则将zip文件下载到合适的位置。
从IntelliJ IntelliJ IDEA -> Preferences(macOS)或File -> Settings(Windows / Linux)菜单中选择Plugins项目。
单击Installed窗口顶部选项卡右边的齿轮图标。从下拉菜单中选择Install Plugin from Disk…
导航到插件的位置,选择zip文件,然后单击Open。点击OK。
当提示您这样做时,请单击到Restart IDE,然后单击确定OK。
5、汇入 CoreBanking
该CoreBanking应用程序是一个用于演示目的的简单银行应用程序,可以在https://github.com/diffblue/CoreBanking中找到。
在不加载项目的情况下启动IntelliJ以查看欢迎屏幕:
选择Get from Version Control选项。选择Git从版本控制下拉框。CoreBanking在存储库框中输入url,为项目选择合适的位置。然后,单击Clone。
使用Al, Diffblue可以以人 类可读的形式自动编写Java单元测试,覆盖率高达80%,随着代码的发展,即使在具有数百万行代码的应用程序上,它们也可以自动维护测试。
6、编写新测试
为了为当前未涵盖的类生成新的测试:
选择Project窗口。
选择CoreBanking-> src-> main-> java-> io.diffblue.corebanking-> account-> Account
。
右键单击并Write Tests从菜单中选择选项。
成功克隆后,展开下面的CoreBanking部分Project以查看源树。
该插件在分析代码和创建测试之前先构建项目。生成项目后,单击屏幕底部的进度栏以打开一个弹出窗口。
进度窗口将显示分析所经历的不同阶段。在分析代码时,可以查看当前进度,但是在较小的项目(例如)中CoreBanking,这是一个非常短的时间范围。
创建新测试后,它们将被自动集成到项目中src/test/java。
请注意,也可以Write Tests通过右键单击以下内容:
源代码编辑器中的各个类
源代码编辑器中的各个方法
源文件顶部的选项卡中的各个类 Project菜单中其类内的各个方法(如果Show Members右键单击Project菜单后已选择)
在IDE的其他地方(例如在测试类或非Java文件中),该Write Tests功能被禁用。
7、运行测试
在Diffblue Cover为您的项目编写测试之后,它们将自动集成到您的测试套件中。Diffblue Cover创建的测试使用JUnit测试框架,因此junit包含在的CoreBanking项目依赖项中pom.xml。
在项目浏览器中,从CoreBanking-> src-> test-> java-> io.diffblue.corebanking-> ->中选择新类AccountTest,然后右键单击并选择Run 'AccountTest'
。
然后将显示JUnit运行的结果:
四、封面示例测试
在本文中,我们将显示输入源和Cover生成的各种复杂性代码的测试,并附有详细的叙述,以帮助您进一步了解Cover生成的测试。
1、基本断言
这是一个带有简单getter的Spring Service源代码的简单示例。DCover可以通过内联写一个春天开机测试的服务提供商,吸气Arrange,Act和Assert。
1.1、来源
import org.springframework.stereotype.Service;
@Service
public class SimpleService
{
public String getValue() {
return “a really simple service”;
}
}
1.2、 Diffblue Cover产生的测试
@SpringBootTest
@RunWith(org.springframework.test.context.junit4.SpringRunner.class)
public class SimpleServiceDiffblueTest {
@Autowired
private SimpleService simpleService;
@Test
public void testGetValue() {
// Arrange, Act and Assert
assertEquals(“a really simple service”, this.simpleService.getValue());
}
}
2、模拟
此类包含两个方法,用于从Amazon S3存储桶上传文件和从Amazon S3存储桶下载文件。由于Amazon S3存储桶是一种云存储机制,因此此类/方法的测试需要依赖项注入。downloadFileFromBucket通过声明所需的S3Object和使用该方法下载的S3Object,DCover可以模拟这些类型的依赖关系并测试方法。
2.1、来源
@Service
public class AmazonService {
@Autowired
private AmazonS3 s3client;
public PutObjectResult uploadFileToBucket(String bucketName, String key, File file) {
return s3client.putObject(bucketName, key, file);
}
public S3Object downloadFileFromBucket(String bucketName, String key) {
return s3client.getObject(bucketName, key);
}
}
2.2 、Diffblue Cover生成的测试
@SpringBootTest
public class AmazonServiceDiffblueTest {
@MockBean
private AmazonS3Client amazonS3Client;
@Autowired
private AmazonService amazonService;
@Test
public void testUploadFileToBucket() {
// Arrange
PutObjectResult putObjectResult = new PutObjectResult();
putObjectResult.setContentMd5(“file-hash”);
when(this.amazonS3Client.putObject(or(isA(String.class), isNull()), or(isA(String.class), isNull()),
or(isA(File.class), isNull()))).thenReturn(putObjectResult);
// Act and Assert
assertSame(putObjectResult, this.amazonService.uploadFileToBucket(“foo”, “foo”,
Paths.get(System.getProperty(“java.io.tmpdir”), “test.txt”).toFile()));
}
@Test
public void testDownloadFileFromBucket() throws UnsupportedEncodingException {
// Arrange
StringInputStream objectContent = new StringInputStream(“file-name”);
S3Object s3Object = new S3Object();
s3Object.setObjectContent(objectContent);
when(this.amazonS3Client.getObject(or(isA(String.class), isNull()), or(isA(String.class), isNull())))
.thenReturn(s3Object);
// Act and Assert
assertSame(s3Object, this.amazonService.downloadFileFromBucket(“foo”, “foo”));
}
}
3、与操作系统无关的断言
本示例以其他格式返回时间。DCover编写一个测试以声明不依赖于操作系统或本地时区的日期和时间。
3.1、来源
public class TimeInAliceWonderland {
private static final String DODO_DATETIME_FORMAT = “ss:mm:HH dd-MMM-yyyy”;
public static String reformatDodoDateTime(Date humanDate) {
Map<String, DateFormat> dateFormatMap = new HashMap<>();
dateFormatMap.put(DODO_DATETIME_FORMAT, new SimpleDateFormat(DODO_DATETIME_FORMAT));
return dateFormatMap.get(DODO_DATETIME_FORMAT).format(humanDate);
}
}
3.2、 Diffblue Cover产生的测试
@Test
public void testReformatDodoDateTime() {
LocalDateTime atStartOfDayResult = LocalDate.of(1970, 1, 1).atStartOfDay();
assertEquals(“00:00:00 01-Jan-1970”, TimeInAliceWonderland
.reformatDodoDateTime(
Date.from(atStartOfDayResult.atZone(ZoneId.systemDefault()).toInstant())));
}
4、包含逻辑的例子
在此示例中,DCover编写了两个测试以覆盖通过条件的每个路径-一个将余额加10并断言新余额应为20的测试,以及另一个关闭帐户的测试。
4.1、资料来源
public class Account {
private final long accountNumber;
private final Client client;
private long currentBalance;
private String accountName;
private AccountState accountState;
public Account(final long accountNumber, final Client client, final long amount) {
this.accountNumber = accountNumber;
this.client = client;
currentBalance = amount;
accountName = “Current”;
accountState = AccountState.OPEN;
}
public long getCurrentBalance() {
return currentBalance;
}
public void addToBalance(final long amount) throws AccountException {
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
e = amount;
accountName = “Current”;
accountState = AccountState.OPEN;
}
public long getCurrentBalance() {
return currentBalance;
}
public void addToBalance(final long amount) throws AccountException {
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-3TTYJGlP-1713297047626)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!