我刚刚在代码审查中被要求检查调用Perl模块GetOptions()函数的返回代码Getopt::Long.
我不记得曾见过这样的GetOptions()功能测试.
那么人们通常不会检查此函数的返回码是否有特定的原因?
天儿真好,
我正与一群离岸开发人员合作,他们一直在使用单位测试这个术语.
他们的QA文档讨论了编写单元测试然后执行系统的单元测试.
这不符合我对单元测试的解释.
我习惯将单元测试作为测试或测试套件,用于练习单个类,通常是黑盒子.被测试的类可能需要实现包含其他类,但通常它是由单元测试执行的单个类.
然后你有系统功能测试,整合测试,验收测试等.
我想知道这对我来说有点迂腐吗?或者这是你在提到单元测试和单元测试时的想法?
编辑:Rob Wells.我需要澄清的是,从黑匣子的角度来看这种测试只是一个方面.当使用模拟对象来验证内部行为时,您实际上是从白盒的角度进行测试,因为您知道要在框内发生什么.
天儿真好,
这关系到我的明星开发商的问题,并就告诉别人,他们正在编写恶意代码的这个问题,但我看这种情况是更具体的.
也就是说,我如何告诉一个"明星"他们对我编写的程序的更改很差并且执行不一致而不仅仅是因为我对某人"玩我的东西"感到恼火?
添加的新功能被明确地遗漏在这个shell脚本的原始版本之外,以使它尽可能简单,直到我们知道我们将在负载下看到的错误.
基本上,我认为尝试第二次猜测所有错误情况是不可能的,事实上可能会让我们在做了大量工作后走上了一条完全错误的道路.
在看到需要添加的内容之后,有人潜入并进行了添加但不幸的是:
我总是尝试从Damien Conway的角度来看待编码"始终编码,好像你的系统将由一个知道你住在哪里的精神病患者维护." 也就是说,我试图让它变得容易,而不是作为我自己才华的广告."这段代码做了什么?" 练习很有趣,最好留给混淆比赛恕我直言.
任何建议都很受欢迎.
干杯,
为什么在Perl文件中设置perms时需要使用int()函数?
die "blab, blah"
if (! chmod(int(0664), $tmp_file));
Run Code Online (Sandbox Code Playgroud)
我可以理解oct()的使用,如下面的perldoc示例所示:
$mode = "0644"; chmod(oct($mode), $tmp_file);
Run Code Online (Sandbox Code Playgroud)
但int()函数?
编辑
为了完整起见,这是perldoc -f chmod的推荐......
$mode = 0644; chmod $mode, "foo"; # this is best
Run Code Online (Sandbox Code Playgroud) 在查看SSI printenv转储时,我看到一个变量URI_REQUEST.
在阅读Apache mod_include文档时,我看到DOCUMENT_URI,它们定义为"用户请求的文档的(% - 解码)URL路径".
谁知道两者之间的区别?
TIA.
我正在从一本书(Mac OS X的Cocoa编程)中自学Objective-C,但是我已经有一半了但是我有两个问题没有在书中得到解答或定义.
在定义类方法时(假设存在于.h文件中)之间有什么区别:
- (int)人口;
+(int)人口;
我现在看到的方式是-方法要求首先分配和初始化类,但是+可以静态调用,而不需要分配和初始化.例如(在另一个类的函数中)
// Using -
Earth *world = [[Earth alloc] init];
int population = [world population];
// Using +
int population = [Earth population];
Run Code Online (Sandbox Code Playgroud)
如果这是正确的,我何时应该使用静态方法,这样做是否有任何缺点.
在函数参数中定义var或在函数中定义var时,是否使用*表示var将是一个对象?例如(再次在头文件中.)
- (void)setPopulation :( NSNumber*)人口; //使用*作为人口是NSNumber
- (void)setPopulation:(int)population; //人口不是一个类,所以不需要*
很抱歉,如果我的任何术语在Objective-C领域没有意义,例如静态方法等.我是PHP和Ruby程序员.
我在C++中有以下结构:
struct routing_entry {
unsigned long destSeq; // 32 bits
unsigned long nextHop // 32 bits
unsigned char hopCount; // 8 bits
};
Run Code Online (Sandbox Code Playgroud)
我有以下功能:
routing_entry Cnode_router_aodv::consultTable(unsigned int destinationID ) {
routing_entry route;
if ( routing_table.find(destinationID) != routing_table.end() )
route = routing_table[destinationID];
return route; // will be "empty" if not found
}
Run Code Online (Sandbox Code Playgroud)
"routing_table"是一个stl :: map,定义如下:
map< unsigned long int, routing_entry > routing_table;
Run Code Online (Sandbox Code Playgroud)
我现在的问题是,当使用consultTable函数时,我想检查返回值是否实际初始化,Java伪代码中有些类似(因为我来自Java阵营):
Route consultTable(int id) {
Route r = table.find(id);
return r;
}
Run Code Online (Sandbox Code Playgroud)
然后检查r == null
是否可以将vim会话中的备用缓冲区重置为以前的值?
通过备用缓冲区,我指的是#引用的缓冲区,即输入cntl- ^时显示的缓冲区.
说我有两个文件打开main.c和other.c并且:ls给了我:
1 %a "main.c" lines 27
2 # "other.c" lines 56
Run Code Online (Sandbox Code Playgroud)
假设我打开另一个文件,例如refer.c,:ls现在会给我:
1 %a "main.c" lines 27
2 "other.c" lines 56
3 # "refer.c" lines 125
Run Code Online (Sandbox Code Playgroud)
如果我删除包含refer.c的缓冲区,:ls现在显示:
1 %a "main.c" lines 27
2 "other.c" lines 56
Run Code Online (Sandbox Code Playgroud)
但如果我做一个cntl- ^,将再次显示refer.c!
是否有某种方法可以让vim将备用缓冲区重置为最后一次自动恢复?备用缓冲区的"历史"?
或者我坚持做一个:2 b将other.c重新加载到备用缓冲区?
或许这种行为有充分的理由?
天儿真好,
虽然在这里考虑过这个问题,但是对于可能的未来变化进行了过度设计,这让我想到了.
您可以提供哪些理由反对那些坚持要求设计的人,因为"他们可能希望在未来的某个阶段将其用于其他地方"?
同样地,当人们接受这些要求然后回来时,你会做出什么样的臃肿设计以及你没有要求的额外"花里胡哨"?
当您知道现在或在不久的将来存在的需求或可能的用途时,我可以理解扩展设计.而且我并不主张只是轻率地接受一系列要求并明确地实施,而不提供任何关于你认为可能缺失的反馈.
我在谈论当人们坚持添加或拥有无关功能时该做什么,以便"我们可能会在未来的某个阶段将其用于其他地方?"