Tag: C#的

你如何将unit testing引入一个大的,传统的(C / C ++)代码库?

我们有一个用C语言编写的大型多平台应用程序(只有less量的C ++)。多年来,随着C / C ++大型应用程序中许多function的不断发展, #ifdef地狱 大的文件,很难隔离可testing的代码 function太复杂,不易testing 由于这个代码是针对embedded式设备的,所以在实际的目标上运行它会花费很多的开销。 因此,我们希望在本地系统上进行更多快速周期的开发和testing。 但是我们希望避免“复制/粘贴到您的系统上的.c文件,修复错误,复制/粘贴”的经典策略。 如果开发人员要麻烦去做,我们希望能够在以后重新创build相同的testing,并以自动化的方式运行。 这是我们的问题:为了重构代码,使其更加模块化,我们需要它更加可testing。 但是为了引入自动化的unit testing,我们需要它更加模块化。 一个问题是,由于我们的文件太大了,我们可能会在一个文件里面有一个函数,在同一个文件中调用一个函数,我们需要把这个文件作为一个unit testing。 看起来这样做会less一些问题,因为我们的代码变得更加模块化了,但是还有很长的一段路要走。 我们想要做的一件事就是用注释标记“已知是可testing的”源代码。 然后,我们可以为可testing代码编写一个脚本扫描源文件,将其编译为单独的文件,并将其与unit testing链接。 我们可以在修复缺陷并添加更多function时,慢慢地引入unit testing。 但是,有人担心维护这个scheme(以及所有必需的存根函数)会变得太麻烦,开发人员将停止维护unit testing。 所以另一种方法是使用一个工具自动生成所有代码的存根,并将其与该文件链接。 (我们发现这样做的唯一工具是一个昂贵的商业产品)但是这种方法似乎要求我们所有的代码在开始前都要更模块化,因为只有外部调用才能被删除。 就个人而言,我宁愿让开发人员考虑他们的外部依赖关系,聪明地写出他们自己的存根。 但是,这可能是压倒性的,以排除一个可怕的杂草丛生的10,000行文件的所有依赖关系。 要说服开发人员需要为所有的外部依赖维护存根可能是困难的,但这是否正确? (另一个我听说的论点是,一个子系统的维护者应该为他们的子系统维护存根,但是我想知道是否迫使开发者写他们自己的存根会导致更好的unit testing?) #ifdefs当然会为这个问题增加另外一个维度。 我们已经看过几个基于C / C ++的unit testing框架,并且有很多选项看起来不错。 但是我们还没有find任何东西来缓解从“没有unit testing代码的毛球”到“unit testing代码”的过渡。 所以这里是我的问题给任何其他谁已经通过这个问题: 什么是一个好的起点? 我们正朝着正确的方向走,还是我们错过了一些明显的东西? 什么工具可能有助于转型? (最好是免费/开源,因为我们现在的预算大致为零) 请注意,我们的构build环境是基于Linux / UNIX的,所以我们不能使用任何仅限于Windows的工具。

性能如何影响未使用的使用指令?

当你创build一个新的页面或项目时,Visual Studio会自动为你创build使用语句。 其中一些你永远不会使用。 Visual Studio具有“删除未使用的用户”的有用function。 我想知道如果从来没有被访问过的using语句仍然在文件的顶部被提及,那么对程序性能是否有负面的影响。

从C枚举中打印文本而不是值

int main() { enum Days{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}; Days TheDay; int j = 0; printf("Please enter the day of the week (0 to 6)\n"); scanf("%d",&j); TheDay = Days(j); //how to PRINT THE VALUES stored in TheDay printf("%s",TheDay); // isnt working return 0; }

在C中创build一个新目录

我想写一个程序来检查一个目录是否存在; 如果该目录不存在,那么它会在其中创build一个目录和一个日志文件,但是如果该目录已经存在,那么它只是在该文件夹中创build一个新的日志文件。 我如何用Linux在C中执行此操作?

std :: move()如何将值传递给RValues?

我只是发现自己不完全理解std::move()的逻辑。 起初,我google了,但似乎只有关于如何使用std::move()文档,而不是它的结构如何工作。 我的意思是,我知道模板成员函数是什么,但是当我查看VS2010中的std::move()定义时,它仍然是令人困惑的。 std :: move()的定义如下。 template<class _Ty> inline typename tr1::_Remove_reference<_Ty>::_Type&& move(_Ty&& _Arg) { // forward _Arg as movable return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg); } 对我来说最奇怪的是参数(_Ty && _Arg),因为当我像下面看到的那样调用函数时, // main() Object obj1; Object obj2 = std::move(obj1); 它基本上等于 // std::move() _Ty&& _Arg = Obj1; 但是,正如你已经知道的那样,你不能直接将LValue链接到RValue引用,这使我认为它应该是这样的。 _Ty&& _Arg = (Object&&)obj1; 然而,这是荒谬的,因为std :: move()必须适用于所有的值。 所以我想完全明白这是如何工作的,我也应该看看这些结构。 template<class _Ty> struct _Remove_reference { […]

Vim是否有C ++ 11语法文件?

特别是,初始化列表的显示非常糟糕: vector<int> v({1,2,3}); 将突出红色的花括号(表示错误)。

无法应用项目X的发布属性

每当我们在我们的主要解决scheme中进行构build时,我们会收到以下警告: 无法应用项目“microsoft.visualstudio.qualitytools.unittestframework”的发布属性。 有没有人见过这样的事情? 有想法该怎么解决这个吗? 它发生在我们所有的开发者机器上,也发生在我们的TFS构build服务器上。 但是,它只出现在debugging模式下。

什么是当今最好的跨平台C ++ UI工具包?

我正在写便携式现代C ++的高性能系统。 很多STL和Boost。 我想开始build立这个系统的一些前端。 通常我会select使用一个非c ++解决scheme的用户界面,但是这意味着一个非常高的性能用户界面,这意味着响应消息的低延迟,大量的信息sorting和显示等我已经写了很多.NET中的实时用户界面,他们很好地完成了这项工作。 不过,我真的希望这是跨平台没有任何技巧(如单声道),并只是工作。 什么是实现这一目标的最佳select? 编辑: 让我把另外一个我刚才记得的,JUCE。 免费用于非商业用途,以及跨平台。 唯一的问题是开发是由一个人控制的,但是源代码是可用的。 JUCE

string.Empty vs null.Which你使用?

最近有一位同事告诉我不要在设置stringvariables时使用string.Empty ,而是使用null因为它会污染堆栈? 他说不这样做 string myString=string.Empty; 但是做string mystring=null; 真的有关系吗? 我知道string是一个对象,所以这是有道理的。 我知道是一个愚蠢的问题,但你的看法是什么?

在C#中以stringforms获取类的名称

有没有办法获得一个类名并将其转换为C#中的string? 作为entity framework的一部分,.Include方法需要在执行查询时join点分隔的string列表。 我有我想要join的类模型,由于重构和将来代码维护的原因,我希望能够在引用此类时具有编译时安全性。 因此,我有办法做到这一点: class Foo { } tblBar.Include ( Foo.GetType().ToString() ); 我不认为我可以做没有实例的GetType()。 有任何想法吗?