特别是我担心这种情况:
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()函数.
在这种情况下,单元测试将错误地报告成功.我在测试设计上做错了吗?
我有一个大的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.
您是否相信当文件变得非常大时,在其他来源中包含源文件是一种可接受的解决方法?我应该说,在较小的类中拆分实现的类不是一个选项.
我的基类有这个功能
LRESULT CBaseClass::OnTestFunction(WPARAM id, LPARAM=0)
{
...
}
Run Code Online (Sandbox Code Playgroud)
当派生类调用此函数时
OnTestFunction(nId);
Run Code Online (Sandbox Code Playgroud)
我得到一个错误C2660:"函数不带1个参数".
这是为什么 ?
如果问题很愚蠢,请耐心等待.
以下是在头文件中定义的:
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)
怎么了 ?
谢谢你的时间.