加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

单元测试 – 在TDD中,我如何确保测试本身不会过时(并错误地报告S

发布时间:2020-12-14 04:52:37 所属栏目:百科 来源:网络整理
导读:特别是我担心这种情况: 1)我写了一个包含1个成员变量和一个复制函数的类 class MyClass{private:int grade;public:void setGrade(int x) { grade = x; }int getGrade() { return grade; }void copyFrom(const MyClass* src) { grade = src-grade; }} 2)沿着
特别是我担心这种情况:

1)我写了一个包含1个成员变量和一个复制函数的类

class MyClass
{
private:
int grade;

public:
void setGrade(int x) { grade = x; }
int getGrade() { return grade; }
void copyFrom(const MyClass* src) { grade = src->grade; }
}

2)沿着这些线写一个单元测试

void testCopyFrom()
{
MyClass mc1;
MyClass mc2;
mc1.setGrade(-347);
mc2.setGrade(10);
mc2.copyFrom(&mc1);
TS_ASSERT_EQUALS(mc2.getGrade(),-347);
}

3)几个月后,我添加了第二个成员变量

private:
int grade,extra;

并且,(你猜对了!)忘了相应地更新copyFrom()函数.

在这种情况下,单元测试将错误地报告成功.我在测试设计上做错了吗?

解决方法

TDD意味着首先测试:在更改代码之前,您应该更新代码.在这种情况下,如果你决定添加额外的,你应该在额外添加API的测试(到目前为止你没有,但也许你会想要getExtra()等),然后,当你添加和修改测试时,您会注意到需要将setExtra()和getExtra()调用添加到testCopyFrom().

在这个阶段,你的测试大多会失败(红色),然后你可以做真正的代码使它们通过(绿色),最后,清理和重构,使用你的测试作为指导你是否已经破碎任何东西.

阅读更多关于red-green-refactor – 它是TDD.

另外,你应该将getGrade()标记为const,即

int getGrade() const { return grade; }

这意味着您可以使用const指针或MyClass实例的引用来获得成绩.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读