我正在为我的一些代码编写单元测试,并遇到了一个情况,我有一个具有小暴露接口但内部结构复杂的对象,因为每个公开的方法都会运行大量内部函数,包括对象状态的依赖性.这使得外部接口上的方法很难进行单元测试.
我最初的问题是我是否应该单独测试这些内部函数,因为它们更简单,因此更容易编写测试?我的直觉是肯定的,这导致后续问题,如果是这样,我将如何在C++中这样做呢?
我提出的选项是将这些内部函数从private更改为protected,并使用friend类或inheritence来访问这些内部函数.这是执行此操作的最佳/唯一方法是保留隐藏内部方法的一些语义吗?
存在用于将代码与针对各种语言的自定义指定的编码指南/标准集进行比较的工具(而不是针对常见缺陷的纯静态分析).示例包括用于.Net代码的FxCop和用于Java的CheckStyle,但我想知道人们在C++世界中知道的示例.
一个现有的问题是关于提供像Vera这样的例子的免费工具,但我也想知道可能有的商业工具.
使用FileSystemObject时,您可以使用路径"."来引用运行脚本的目录.是否可以更改FileSystemObject认为当前目录的内容,以便您可以使用".".其他目录的路径语法?
例:
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFolder(".") ' Returns the current directory
Set f2 = fso.GetFolder(".\backup") ' Returns the "backup" directory under the current directory
Run Code Online (Sandbox Code Playgroud)
作为简化示例,是否有一种方法来调用fso,以便fso.GetFolder(".")调用返回备份目录?
如果我为TextBlock显示的字符串太长,它似乎只是继续写过TextBlock的边缘.如果文本不适合所提供的空间,我宁愿使用添加省略号("...")的常用技术.我应该如何在Silverlight中执行此操作?
我发现的引用都使用了Silverlight中没有的TextRenderer类
我正在寻找计算大型(1500万行)表中有多少行的最佳方法.select count(*) from table;根据我在此事上发现的一些较旧的帖子,天真的方式显然是O(n),例如http://osdir.com/ml/sqlite-users/2010-07/msg00437.html.
是否有一个恒定的时间机制来获取此信息,或者失败的是直接select count(*)查询的首选替代方案?
我遇到了C++中一个关键部分的问题.我得到一个挂起的窗口,当我转储进程时,我可以看到线程在一个关键部分等待:
16 Id: b10.b88 Suspend: 1 Teb: 7ffae000 Unfrozen
ChildEBP RetAddr
0470f158 7c90df3c ntdll!KiFastSystemCallRet
0470f15c 7c91b22b ntdll!NtWaitForSingleObject+0xc
0470f1e4 7c901046 ntdll!RtlpWaitForCriticalSection+0x132
0470f1ec 0415647e ntdll!RtlEnterCriticalSection+0x46
Run Code Online (Sandbox Code Playgroud)
行数据等都表示进入特定的关键部分.唯一的问题是没有其他线程似乎将此关键部分保持打开状态.Windbg的!locks命令没有任何指示,并且转储临界区表示它没有被锁定,因为null所有者和下面结构中的-1 LockCount可以看到它.
0:016> dt _RTL_CRITICAL_SECTION 42c2318
_RTL_CRITICAL_SECTION
+0x000 DebugInfo : 0x02c8b318 _RTL_CRITICAL_SECTION_DEBUG
+0x004 LockCount : -1
+0x008 RecursionCount : -1
+0x00c OwningThread : (null)
+0x010 LockSemaphore : 0x00000340
+0x014 SpinCount : 0
0:016> dt _RTL_CRITICAL_SECTION_DEBUG 2c8b318
_RTL_CRITICAL_SECTION_DEBUG
+0x000 Type : 0
+0x002 CreatorBackTraceIndex : 0x2911
+0x004 CriticalSection : 0x042c2318 _RTL_CRITICAL_SECTION
+0x008 ProcessLocksList : _LIST_ENTRY [ 0x2c8b358 - …Run Code Online (Sandbox Code Playgroud) 尽管安装了Windows 10 SDK版本10.0.10586(和更新2),但我的Visual Studio 2015安装不会针对任何Windows 10 SDK版本.
当我打开一个以Windows 10为目标并尝试构建它的解决方案时,我被告知我没有安装该SDK版本.
检查目标平台版本,我可以看到没有选择任何10.*版本的选项.
但是看看VS安装,我可以看到Windows 10 SDK版本10.0.10586被标记为已安装.
Windows 10 SDK版本10.0.10586应该让我以10.0.10240为目标,但是我无法针对它们进行目标/构建.
我试过了:
智能指针是否可以处理铸造,如果不是,解决此限制的安全方法是什么?
我正在尝试做的一个例子是有两个包含智能指针的STL向量(例如).第一个包含指向基类的智能指针,而第二个包含指向派生类的智能指针.智能指针被引用计数,例如与Boost的shared_ptrs类似的行为,但是手动滚动.我已经包含了一些示例代码,我提供了一个例子:
vector<CBaseSmartPtr> vecBase;
vector<CDerivedSmartPtr> vecDer;
...
CBaseSmartPtr first = vecBase.front();
vecDer.push_back(CDerivedSmartPtr(dynamic_cast<CDerived*>(first.get()));
Run Code Online (Sandbox Code Playgroud)
这似乎不还给我,因为我觉得我结束了两个智能指针管理同一个对象.在轨道的某个点上,这可能会导致其中一个释放对象,而另一个仍然保留对它的引用.
我希望的但不认为会起作用的是一个直接的向下投射,同时保持相同的对象,例如
dynamic_cast<CDerivedSmartPtr>(first)
Run Code Online (Sandbox Code Playgroud)
我是否应该更改第二个容器以仅使用CBaseSmartPtr并仅使用向下转换?还有其他解决方案吗?
是否可以将自定义元数据添加到 SQLite 列?或者我需要将其存储在单独的列或表中?
我正在开发一个数据库,我想以某种形式存储列的单位,即温度列以开尔文为单位。是否可以将其存储为字符串或附加到列的某种形式的自定义元数据?
c++ ×4
sqlite ×2
c# ×1
coding-style ×1
count ×1
metadata ×1
silverlight ×1
sql ×1
stl ×1
unit-testing ×1
vbscript ×1
windows ×1
windows-10 ×1