复杂系统如何保障代码质量?让测试先行
阿里妹导读:TDD(Test Driven Development)是一种强调测试先行的开发方式,通过编写单元测试用例,有效保障存量复杂系统在开发、重构上的质量。本文通过分析现有测试方法面临的问题,分享如何使用GTest框架进行单元测试,以及在单元测试中的一些实践心得。
文末福利:100+本精华电子书免费下载!
无效diff问题:以公交规划引擎为例,依赖步导引擎、搜索、公交突发事件、路况等多个下游服务,获取结果的差异导致很多无效diff。
运行时间较长:case量较多时运行时间较长,在10分钟级别。由于这一步成本较高,一般开发人员跑diff的频率不会太高,无法进行"每次一小步"的测试。
排查困难:当发现diff后进行排查非常困难,因为是整个请求级别的diff,中间步骤可能都存在问题。
int RCUnitTest::Excute()
{
int argc = 2;
char* argv[] = {const_cast<char*>(""), const_cast<char*>("--gtest_output=\"xml:./testAll.xml\"")};
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
class DateTimeUtilTest : public ::testing::Test
{
protected:
virtual void SetUp()
{
}
virtual void TearDown()
{
}
};
TEST_F(DateTimeUtilTest, TestAddSeconds_leap)
{
//闰年测试 2020-02-28
tm tt;
tt.tm_year = (2020 - 1900);
tt.tm_mon = 1;
tt.tm_mday = 28;
tt.tm_hour = 23;
tt.tm_min = 59;
tt.tm_sec = 50;
DateTimeUtil::AddSeconds(tt, 30);
EXPECT_TRUE(tt.tm_sec == 20);
EXPECT_TRUE(tt.tm_min == 0);
EXPECT_TRUE(tt.tm_hour == 0);
EXPECT_TRUE(tt.tm_mday == 29);
EXPECT_TRUE(tt.tm_mon == 1);
//非闰年测试 2019-02-28
tm tt1;
tt1.tm_year = (2019 - 1900);
tt1.tm_mon = 1;
tt1.tm_mday = 28;
tt1.tm_hour = 23;
tt1.tm_min = 59;
tt1.tm_sec = 50;
DateTimeUtil::AddSeconds(tt1, 30);
EXPECT_TRUE(tt1.tm_sec == 20);
EXPECT_TRUE(tt1.tm_min == 0);
EXPECT_TRUE(tt1.tm_hour == 0);
EXPECT_TRUE(tt1.tm_mday == 1);
EXPECT_TRUE(tt1.tm_mon == 2);
};
首先TDD的开发方式强调的是测试先行,编写测试代码是在前面的,这个过程等于是理解需求的过程。即想清楚你要实现的是什么功能?这个测试代码是理清需求的产物, 如此而已,不存在更多时间成本。
TDD开发方式属于典型的一次投入,持续受益的事情,用例积累越多,越容易在早期发现问题,重构有了质量保障,代码越来越整洁清晰,开发同学们再也不用哀叹历史代码。
阿里云开发者藏经阁
100+本精华电子书免费下载
深度分享阿里工程师实战经验,100+本精华电子书免费下载!汇聚阿里巴巴技术实践精华,覆盖Java、云原生、大数据、运维、AI、算法、前端、物联网等超多技术领域,更多技术干货、大会资料持续更新中。
点击“阅读原文”,快去下载吧~