我有一个基类,Statement,这是其它几类从,继承命名IfStatement,WhereStatement等...什么是在执行测试的最佳方式if声明,以确定哪种类型的Statement一个实例从派生类?
我正在寻找有关如何处理以下设计问题的建议(使用基于stackoverflow的虚构示例).我试图避免贫血领域模型,并寻求针对此类案例的一般"最佳实践"建议.
假设正在为stackoverflow开发一个新功能,只要他/她的问题收到10个upvotes就会向问题所有者发送电子邮件通知.
域对象模型是这样的:
public class Question
{
string Question { get; set; }
IList<Votes> Upvotes { get; set; }
User Owner { get; set; }
public void AddUpvote(Vote upvote)
{
Upvotes.Add(upvote);
}
}
Run Code Online (Sandbox Code Playgroud)
更改AddUpvote()以获取IEmailerService参数并在AddUpvote()方法中执行逻辑.
public void AddUpvote(Vote upvote, IEmailerService emailer)
{
Upvotes.Add(upvote);
if ( Upvotes.Count == 10 )
{
emailer.Send(Owner.EmailAddr);
}
}
Run Code Online (Sandbox Code Playgroud)检测此状态AddUpvote()并AddUpvote()从IoC容器中解析IEmailService(而不是将IEmailerService作为参数传递).
在调用的外部服务对象中检测此状态question.AddUpvote().
public void UpvoteClickHandler(Question question)
{
question.AddUpvote(new Upvote());
if ( question.Upvotes.Count == 10 …Run Code Online (Sandbox Code Playgroud)这是挑战(我自己的发明,但如果以前出现在网络的其他地方,我不会感到惊讶).
编写一个函数,该函数采用单个参数,该参数是简单数学表达式的字符串表示形式,并将其作为浮点值进行计算."简单表达"可以包括以下任何一种:正十进制数或负十进制数,+,-,*,/,(,).表达式使用(正常)中缀表示法.操作员应按其出现的顺序进行评估,即不像在BODMAS中那样进行 评估,但当然应该正确观察括号.该函数应该为此表单的任何可能表达式返回正确的结果.但是,该函数不必处理格式错误的表达式(即语法错误的表达式).
表达的例子:
Run Code Online (Sandbox Code Playgroud)1 + 3 / -8 = -0.5 (No BODMAS) 2*3*4*5+99 = 219 4 * (9 - 4) / (2 * 6 - 2) + 8 = 10 1 + ((123 * 3 - 69) / 100) = 4 2.45/8.5*9.27+(5*0.0023) = 2.68...
我预计会有某种形式的"作弊"/狡猾,所以请让我预先反对它!通过作弊,我指的是eval在动态语言(如JavaScript或PHP)中使用或等效函数,或者同时编译和执行代码.(我认为我的"没有BODMAS"的规格几乎可以保证这一点.)除此之外,没有任何限制.我在这里预计会有一些Regex解决方案,但不仅仅是这样,我们会感到很高兴.
现在,我主要对C#/ .NET解决方案感兴趣,但是任何其他语言都是完全可以接受的(特别是F#和Python用于功能/混合方法).我还没有决定我是否会接受最短或最巧妙的解决方案(至少对于语言而言)作为答案,但我欢迎任何语言的任何形式的解决方案,除了我刚才禁止的!
我现在在这里发布了我的C#解决方案(403个字符).更新: …
我们为产品使用的库之一使用单例来访问它.我很确定它是作为静态实例实现的(它不是开源的).这适用于单个文档应用程序,但我们的应用程序可能加载了多个文档.我假设访问该实例是这样写的:
Instance* getInstance() {
static Instance* inst = new Instance();
return inst;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,有没有办法可以强大地创建多个实例?我唯一能想到的就是不仅要处理并使用某种类型的IPC来将它们联系在一起.我想不出任何不那么黑的东西.
我已经要求供应商实现某种类型的会话令牌,因此我可以拥有多个并发实例,但它们很大而且我们很小.
科里
编辑:
而不是尝试一些狡猾的恶作剧来获得我想要的东西,我将用我自己的类包装整个事物并为每个getter添加一个会话密钥.在内部,我将跟踪已分配的内容添加我自己的发布方法以返回资源.由于很多原因,这是次优的,但我想不出更好的主意.
感谢大家的好评.
我正在尝试编写一个将在MediaWiki中创建用户的脚本,以便我可以运行批处理作业来导入一系列用户.
我正在使用mediawiki-1.12.0.
我从一个论坛得到了这个代码,但看起来它不适用于1.12(它是1.13)
$name = 'Username'; #Username (MUST start with a capital letter)
$pass = 'password'; #Password (plaintext, will be hashed later down)
$email = 'email'; #Email (automatically gets confirmed after the creation process)
$path = "/path/to/mediawiki";
putenv( "MW_INSTALL_PATH={$path}" );
require_once( "{$path}/includes/WebStart.php" );
$pass = User::crypt( $pass );
$user = User::createNew( $name, array( 'password' => $pass, 'email' => $email ) );
$user->confirmEmail();
$user->saveSettings();
$ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
$ssUpdate->doUpdate();
Run Code Online (Sandbox Code Playgroud)
谢谢!
这个函数声明给了我错误:
ostream& operator<<(ostream& os, hand& obj);
Run Code Online (Sandbox Code Playgroud)
错误是:
error C2143: syntax error : missing ';' before '&'
error C4430: missing type specifier
error C2065: 'os' : undeclared identifier
error C2065: 'obj' : undeclared identifier
error C2275: 'hand' : illegal use of this type as an expression
see declaration of 'hand'
error C4430: missing type specifier
Run Code Online (Sandbox Code Playgroud)
hand是我制作的一个类,display是一个类型的公共数据成员char*.
谁能告诉我我做错了什么?
我是一名机械工程研究生,我的顾问刚刚让我为我们的一个传感器项目编写数据可视化实用程序.因为这是夏天,他希望我对它有一些乐趣,我认为这是学习一门擅长科学计算的语言的好时机,所以我继续前进,直接进入F#.
由于我是功能编程范例的新手,我在构建程序时遇到了一些困难,特别是考虑到在F#中轻松组合OO/FP的可能性.我的任务如下:
我该如何设计我的应用程序?我想过这样的事情:1.我打算连接到每个传感器以开始接收数据,然后将这些数据转储到消息队列中.我有一个事件驱动的处理函数接收队列上的数据.当接收到数据时,确定数据来自哪个传感器,然后将数据放入相应传感器的时间序列对象中.3.每次添加传感器数据时间序列对象时,我都可以触发一个事件并让我的统计函数处理传感器的新数据.
显然我需要在这个应用程序中保持某种状态.所以我添加了以下可变数据结构.我将使用通用.NET可调整大小的List来存储我的时间序列数据,并实现一个新的派生来触发数据添加事件.我可以在一个字典中存储sensorid和实际时间序列容器之间的映射(当数据从队列中弹出时,我可以读取sensorid字段,获取该sensorid的时间序列容器,然后轻松添加新数据).我还可以有第二个字典来存储sensorid和包含该sensorid时间序列统计信息的各个时间序列之间的映射.当添加主传感器时间序列时,它会触发一个事件来调用所有统计函数以在新数据上运行它们,并将它们的信息存储在该sensorid的相应字典中.
我还没有想过如何保存数据,但我想我可以用数据写出二进制文件.
任何建议,想法或参考表示赞赏.
谢谢 :)
假设我通过git存储库与某人合作,并且有一个特定的文件,我永远不想接受任何外部更改.
有没有办法让我设置我的本地仓库,以便每当我拉动时不抱怨冲突的合并?我想在合并此文件时始终选择我的本地版本.
有关Intellij插件开发的文档很少.如果您已经编写了任何Intellij插件,您是如何为插件编写测试的?任何指向文档或源代码的指针都表示赞赏.
我刚刚回顾了最近几乎完成的项目并发现了一个非常严重的问题.我花了大部分时间来测试代码,重现不同情况"可能"导致代码错误.
您是否有任何想法或经验可以分享如何减少测试所花费的时间,从而使开发更加顺畅?
我试着按照我所有代码的测试驱动的概念,但我发现很难实现这一点,真的需要一些资深人士的帮助.
谢谢
回复:全部
感谢上面的答案,最初我的问题是如何减少一般测试的时间,但现在,问题在于如何编写有效的自动化测试代码.
我将尝试提高我的技能,如何编写测试套装以减少这部分时间.
但是,我仍然在努力减少如何减少重现错误所花费的时间,例如,一个标准的博客项目很容易重现情况可能会导致错误但是复杂的定制内部系统可能"永远"无法测试经常外出,值得吗?您对如何在此类项目上构建测试计划有任何想法吗?
谢谢你的进一步答案.
c++ ×2
java ×2
testing ×2
.net ×1
code-golf ×1
evaluation ×1
f# ×1
git ×1
git-merge ×1
global ×1
inheritance ×1
math ×1
mediawiki ×1
ostream ×1
parsing ×1
php ×1
reflection ×1
singleton ×1
static ×1
stream ×1
tdd ×1
text-parsing ×1
unit-testing ×1