从几天前开始,我开始对C#和VS2010中的单元测试和TDD感兴趣.我已经阅读了博客文章,观看了youtube教程,以及更多解释为什么TDD和单元测试对您的代码如此有用以及如何做到这一点的东西.
但我发现的最大问题是,我不知道在我的测试中要检查什么以及不检查什么.
我理解我应该检查所有逻辑操作,引用和依赖项的问题,但是,例如,我应该为字符串格式创建一个单元测试,这是通过用户输入的吗?或者它只是浪费我的时间,而我可以在实际代码中检查它?
有没有指导澄清这个问题?
我正在使用sqlite3和C++ API以及VisualStudio 2010为一个项目开发一个小包装器.就像使用SQLiteDataBaseBrowser这样的工具进行检查一样,主要问题是我尝试在表中插入的信息显示为损坏/根本没有出现.该表似乎是使用UTF8编码正确创建的.
我尝试将VS中的字符集配置值用作"使用多字节字符集",并尝试使用"使用Unicode字符集",但结果没有变化.两者都给我带来了与损坏数据相同的问题.我使用典型的std :: strings转换为legacy c char*,正如我在几个例子中看到的,它应该与API提供的sqlite3_bind_text(...)函数一起正常工作.
sqlite3_bind_int(stmt, 1, newShop.GetId());
sqlite3_bind_text(stmt, 2, newShop.GetName().c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 3, newShop.GetLocation().c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 4, newShop.GetPicturePath().c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 5, newShop.GetRegisters().c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 6, newShop.GetMixes().c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 7, newShop.GetAllowedUsers().c_str(), -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, 8, newShop.IsAvailable() == true?1:0);
Run Code Online (Sandbox Code Playgroud)
newShop是一个类的实例,它包含std :: strings和int中的信息.我不得不说使用int类型的绑定,工作完美且没有问题,但其他人看起来完全搞砸了.当字符串被硬编码时,它们看起来还不错,直到我尝试插入特殊字符,如"áàä"等.
该表是使用以下语句创建的:
char *szSQL = "CREATE TABLE IF NOT EXISTS SHOPS (ID INTEGER PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, LOCATION TEXT, PICTUREPATH TEXT, REGISTERS TEXT, MIXES TEXT, USERS TEXT, AVAILABLE …Run Code Online (Sandbox Code Playgroud) 目前我正在使用一个工具,需要创建一些带有一些额外字段的自定义.NET.我一直想知道什么方法可以更好地解决这个问题,并一直在考虑以下选项:
选项A: - 为每个控件创建一个派生类(比方说,CLabel,CGroupBox ......),我在每个类上定义新字段.这将意味着更糟糕的可持续性,但易于操作.
例:
class CLabel: Label
{
public List<Control> RelatedControls {get; set;}
public String textHint;
// more stuff...
public CLabel()
{}
}
Run Code Online (Sandbox Code Playgroud)
选项B:
- 此选项意味着不从每个控件创建派生类,而是使用实际的Label,GroupBox等控件并创建封装所有"额外"属性的类.将在Control.Tag属性中引用此额外属性对象.我对这个问题有疑问,因为在Tag属性中引用一种复杂的对象对我来说感觉有点蹩脚,但这意味着更好的可持续性,当然也不需要子类化控件.
例:
Label lbl = new Label();
lbl.Tag = new ControlDescription();
Run Code Online (Sandbox Code Playgroud)
选项C:
- 这意味着具有选项A和B的某种组合.只需创建自定义控件,例如CLabel,即向Label控件添加类型ControlDescription字段.这样我们就可以确保封装和可持续性,但是我们避免这种Tag情况.
我很确定有很多选择比那些更好.可能只是使用多态 - 一个我仍然遇到问题的概念 - 可以取消自定义控件类.您认为哪些选项最好?你认为所有这些都可以做得更好吗?
我正在尝试构建一种在twitter中查找表情符号的方法,并将它们与unicode表中可以找到的unicode表联系起来,但我发现很难识别它们,因为我认为编码问题或仅仅是我对它的误解.这个话题.简而言之,我所做的是从http://www.unicode.org/emoji/charts/full-emoji-list.html中的表格中构建一个表情符号"库",其中包含标题和代码点(代码表情符号.我在R里用图书馆rvest取消了这个.
问题出现在我用推特中的twitteR API从twitter获取信息时.因为表情符号的代码看起来并不像这个表中的那些.
让我们举一个100(100点)红色图标表情符号的例子.这是前链接表中的数字1468,其代码点代码为:
U+1F4AF
Run Code Online (Sandbox Code Playgroud)
现在,当我从twitter中获取它时,首先它在状态类中显示为这样,API已内置以使用推文.
\xed??\xed??
Run Code Online (Sandbox Code Playgroud)
然后,一旦我将其转换为数据帧,我也使用来自twitter API的内置函数.例如:
tweet$toDataFrame()
Run Code Online (Sandbox Code Playgroud)
表情符号变为:
<ed><U+00A0><U+00BD><ed><U+00B2><U+00AF>
Run Code Online (Sandbox Code Playgroud)
我尝试使用R中的函数iconv将其转换为以下代码:
iconv(tweet$text, from="UTF-8", to="ASCII", "byte)
Run Code Online (Sandbox Code Playgroud)
我只设法使它看起来像这样:
<ed><a0><bd><ed><b2><af>
Run Code Online (Sandbox Code Playgroud)
因此,结束并在测试结束时,我得到以下结果:
<ed><a0><bd><ed><b2><af>
<ed><U+00A0><U+00BD><ed><U+00B2><U+00AF>
\xed??\xed??
Run Code Online (Sandbox Code Playgroud)
其中没有一个看起来像表格指定的代码点:
U+1F4AF
Run Code Online (Sandbox Code Playgroud)
有没有可能在两个字符串之间进行转换?我错过了什么?为什么Twitter会为emojis返回此信息?
我正在研究一个文本多类分类项目,我需要构建文档/术语矩阵,并用R语言进行训练和测试.
我已经有了不适合R中基矩阵的有限维度的数据集,并且需要构建大的稀疏矩阵才能对例如100k的推文进行分类.我正在使用quanteda软件包,因为它现在比包tm更有用和可靠,其中使用字典创建DocumentTermMatrix,使得过程难以置信地使用小数据集.目前,正如我所说的,我使用quanteda来构建等效的Document Term Matrix容器,稍后我将其转换为data.frame来执行培训.
我想知道是否有办法建立这么大的矩阵.我一直在阅读有关的bigmemory包,允许这种容器的,但我不知道它会与插入符号为后来的分类.总的来说,我想了解这个问题并构建一个解决方法,以便能够处理更大的数据集,因为RAM不是(大)问题(32GB),但我正试图找到一种方法来做到这一点,我觉得完全失去了关于它.