小编War*_*tin的帖子

在TDD中,我如何确保测试本身不会过时(并错误地报告SUCCESS)?

特别是我担心这种情况:

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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

private:
int grade, extra;
Run Code Online (Sandbox Code Playgroud)

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

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

tdd unit-testing

4
推荐指数
1
解决办法
83
查看次数

包含C++源文件是一种批准的方法吗?

我有一个大的C++文件(SS.cpp),我决定将其拆分为较小的文件,以便我可以在不需要阿司匹林的情况下导航它.所以我创造了

SS_main.cpp
SS_screen.cpp
SS_disk.cpp
SS_web.cpp
SS_functions.cpp
Run Code Online (Sandbox Code Playgroud)

并将所有函数从最初的SS.cpp文件剪切粘贴到它们.

最后我将它们包含在原始文件中:

#include "SS_main.cpp"
#include "SS_screen.cpp" 
#include "SS_disk.cpp" 
#include "SS_web.cpp"
#include "SS_functions.cpp"
Run Code Online (Sandbox Code Playgroud)

这种情况现在仍然持续几个月,这些都是我遇到的问题:

  • 整个解决方案搜索(VS中的Shift-Ctrl-F)不会搜索包含的文件,因为它们未列为源文件.

  • 我不得不手动指出它们包含Subversion.

您是否相信当文件变得非常大时,在其他来源中包含源文件是一种可接受的解决方法?我应该说,在较小的类中拆分实现的类不是一个选项.

c++ header include visual-studio

3
推荐指数
2
解决办法
4203
查看次数

奇怪的错误c2660"函数不带1个参数"

我的基类有这个功能

LRESULT CBaseClass::OnTestFunction(WPARAM id, LPARAM=0)
{
...
}
Run Code Online (Sandbox Code Playgroud)

当派生类调用此函数时

OnTestFunction(nId);
Run Code Online (Sandbox Code Playgroud)

我得到一个错误C2660:"函数不带1个参数".

这是为什么 ?

c++ base-class derived-class default-value

2
推荐指数
1
解决办法
5597
查看次数

标准迭代器分配错误

如果问题很愚蠢,请耐心等待.

以下是在头文件中定义的:

typedef char NAME_T[40];

struct NAME_MAPPING_T
{
    NAME_T englishName;
    NAME_T frenchName;
};

typedef std::vector<NAME_MAPPING_T> NAMES_DATABASE_T;
Run Code Online (Sandbox Code Playgroud)

后来需要找到一个特定的英文名称:

const NAMES_DATABASE_T *wordsDb;

string str;

std::find_if(   wordsDb->begin(), 
                wordsDb->end(), 
                [str](const NAME_MAPPING_T &m) -> bool { return strncmp(m.englishName, str.c_str(), sizeof(m.englishName)) == 0; } );
Run Code Online (Sandbox Code Playgroud)

这段代码(我诚实地复制粘贴)编译,但如果我想检查find_if()返回的值,如下所示:

NAMES_DATABASE_T::iterator it;
it = std::find_if(blah ..)
Run Code Online (Sandbox Code Playgroud)

代码不会编译!

实际上,行 = std :: find_if(...) 将返回错误:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::_Vector_const_iterator<_Myvec>' (or there is no acceptable conversion)
Run Code Online (Sandbox Code Playgroud)

怎么了 ?

谢谢你的时间.

c++ iterator std find

1
推荐指数
1
解决办法
343
查看次数