我认为理解基于状态/交互的测试的定义(阅读Fowler的东西等).我发现我开始基于状态但是一直在做更多的交互,我对如何测试某些事情感到有些困惑.
我在MVC中有一个控制器,一个动作调用服务来拒绝一个包:
public ActionResult Deny(int id)
{
service.DenyPackage(id);
return RedirectToAction("List");
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很清楚.提供模拟服务,验证它是否已正确调用,完成.
现在,我有一个视图的操作,允许用户将证书与包关联:
public ActionResult Upload(int id)
{
var package = packageRepository.GetPackage(id);
var certificates = certificateRepository.GetAllCertificates();
var view = new PackageUploadViewModel(package, certificates);
return View(view);
}
Run Code Online (Sandbox Code Playgroud)
这个我有点难过.我正在进行Spec样式测试(可能不正确)所以为了测试这个方法,我有一个类,然后是两个测试:验证调用包存储库,验证是否调用了证书库.我实际上想要第三个测试来验证构造函数是否被调用但不知道如何做到这一点!我觉得这是完全错误的.
因此,对于基于状态的测试,我将传入id,然后测试ActionResult的视图.好的,这是有道理的.但是我不会对PackageUploadViewModel构造函数进行测试吗?因此,如果我对构造函数进行了测试,那么我的一部分只是想验证我是否调用构造函数并且操作返回与构造函数返回的内容匹配.
现在,我能想到的另一个选择是我有一个PackageUploadViewModelBuilder(或同样愚蠢的名字)依赖于两个存储库然后我只是将id传递给CreateViewModel方法或其他东西.然后,我可以模拟这个对象,验证一切,并开心.但是......好吧......看起来很奢侈.我做的很简单......不简单.另外,controller.action(id)返回builder.create(id)似乎无缘无故地添加一个层(控制器负责构建视图模型..对吧?)
我不知道...我在想更多基于状态的测试是必要的,但我担心如果我开始测试返回值,那么如果方法A可以在8个不同的上下文中调用,那么我将会有很多测试爆炸重复 我一直在使用基于交互的测试将一些上下文传递给方法B,这样我所要做的就是验证方法A,称为方法B,我测试了方法B,因此方法A可以信任处理这些上下文.因此,基于交互的测试正在建立这种测试层次结构,但基于状态的测试将使其变得扁平化.
我不知道这是否有意义.
哇,这很长......
是否可以传递带参数的javascript函数作为参数?
例:
$(edit_link).click( changeViewMode( myvar ) );
Run Code Online (Sandbox Code Playgroud) scope.SetVariable("math",?? typeof(System.Math)??);
还是我需要创建一个模块?
我不知道如何更好地描述标题(所以随意改变)但是我想在LINQ to SQL中产生以下语句的等价:
select * from products where category in ('shoes','boots')
Run Code Online (Sandbox Code Playgroud)
字段将基本上来自查询字符串(比这更安全,但为了便于解释),即
string[] myfields = request.querystring["categories"].split(',');
Run Code Online (Sandbox Code Playgroud)
谢谢
我们开始考虑公司信息战略的下一阶段.
目前,各个部门都有Delphi VCL应用程序,这些应用程序专注于他们管理的项目信息.在幕后,我们一直在确保思维加入.
我们现在正处于这样的程度,我们希望让人们有机会在逐个项目或搜索方面浏览我们所拥有的所有信息.
我们认为它将是一个基于Web的界面(至少是内联网),但仍然坚持写入它的内容!
选项似乎是Java,PHP或Ruby.以上任何一项都将涉及我们学习一门新语言(没有新员工的预算),所以我们正在寻找指导
我已成功为Android镜像设置gitosis(包含多个git存储库).在gitosis.conf中的writable =之后添加一个新的.git路径时,我设法插入了几个换行符.当我收到以下解析错误时保存,提交并推送到服务器:
回溯(最近一次调用最后一次):文件"/ usr/bin/gitosis-run-hook",第8行,在load_entry_point('gitosis == 0.2','console_scripts','gitosis-run-hook')()
文件"/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/app.py",第24行,在运行中返回app.main()
在主self.handle_args(解析器,cfg,选项,args)中输入文件"/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/app.py",第38行
文件"/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/run_hook.py",第75行,在handle_args post_update中(cfg,git_dir)
在post_update cfg.read中输入文件"/usr/lib/python2.5/site-packages/gitosis-0.2-py2.5.egg/gitosis/run_hook.py",第33行(os.path.join(export,' ..','gitosis.conf'))
文件"/usr/lib/python2.5/ConfigParser.py",第267行,读取self._read(fp,filename)
文件"/usr/lib/python2.5/ConfigParser.py",第490行,在_read引发e
ConfigParser.ParsingError:文件包含解析错误:./ gitosis-export /../ gitosis.conf
(......)
我删除了换行符并且提交了提交
git commit -m"fix linebreak"--amend
但是git push仍会产生完全相同的错误.它让我相信gitosis阻止我进一步推动.
我该如何从中恢复?
我有一个.NET程序,其事件处理程序绑定到Application.CurrentDomain.UnhandledException.使用调试运行程序时,抛出未处理的异常时会触发此事件.但是,在没有调试的情况下运行时,事件不会触发.
我的问题是什么?
谢谢,安德鲁
我想在网格中显示时动态添加属性(如Browsable(false)).场景是我有一个带有一些公共属性的自定义类.但是,我不希望所有公共属性都显示在UI中.有出路吗?
我尝试使用TypeDescriptor.但是,它仅适用于类型级别,而不适用于属性级别.我找不到任何有关如何在物业级别使用它的帮助.
任何指针都将受到高度赞赏.
#include<iostream>
#include<vector>
#include<algorithm>
class Integer
{
public:
int m;
Integer(int a):m(a){};
};
class CompareParts
{
public:
bool operator()(const Integer & p1,const Integer & p2)
{
return p1.m<p2.m;
}
}obj1;
int main()
{
std::vector<Integer> vecInteger;
vecInteger.push_back(Integer(12));
vecInteger.push_back(Integer(13));
vecInteger.push_back(Integer(5));
vecInteger.push_back(Integer(7));
vecInteger.push_back(Integer(9));
Integer obj2();
std::sort(vecInteger.begin(),vecInteger.end(),obj1);
std::sort(vecInteger.begin(),vecInteger.end(),obj2);
}
Run Code Online (Sandbox Code Playgroud)
为什么第二排序函数中的obj2会导致编译错误.
Late Edit 我将此标记为C#问题以及C++,因为问题出现在两种语言中,如果显示的解决方案很可能是在C#(市场的大部分)中.
我一直在.net 2.0下开发一个应用程序(C++具体,但不相关).
此应用程序使用自定义派生的datagridview.此数据网格视图偶尔会出现关于不包含单元格的DGV区域以及滚动条的严重伪像问题. 在一些调整大小的操作,一个黑色的矩形会在DataGridView,这将在作用限制网格的尺寸的底部绘制. 滚动条也缩小以适应非坚固区域.在我看来,因为系统认为DGV尺寸错误,并且正在进入错误的区域.
alt text http://img12.imageshack.us/img12/2213/81356991.jpg
我只能通过两种方法来修复症状:
1.单击要调整大小的列将自动修复网格
2.在DGV中调用AutoResizeRows()函数将执行修复(但我相信是从第1点).
对自定义DGV的一些修改:
1)配置为处理多行的拖放.
2)点1要求重写OnCellPainting以绘制拖动线.如果看起来有症状,可以发布功能.
3)问题总是发生在一个调整大小(手动和自动两种可能会导致问题),但在调整大小事件没有自定义代码.
onCellPainting的后期编辑代码.在gridview中重写的其他函数:OnMouseDown,OnCellMouseDown,OnClick,OnMouseMove,OnDragOver,OnDragDrop,OnDragLeave,OnKeyDown,其中任何一个看起来都没有症状
protected: [DebuggerStepThrough()]
virtual System::Void OnCellPainting(DataGridViewCellPaintingEventArgs ^e) override
{
//draws red drag/drop target indicator lines if necessary
if (this->AllowDrop && _DragDropCurrentIndex > -1 && ShowDragLines)
{
System::Drawing::Pen ^p = gcnew Pen(System::Drawing::Color::Navy, 3);
//row drag/drop
if (e->RowIndex == _DragDropCurrentIndex &&
_DragDropCurrentIndex <= this->RowCount)
{
//if this cell is in the same row as the mouse cursor
e->Graphics->DrawLine(
p,
e->CellBounds.Left, …Run Code Online (Sandbox Code Playgroud) .net ×3
c# ×3
c++ ×1
datagridview ×1
delphi ×1
exception ×1
functor ×1
git ×1
gitosis ×1
ironpython ×1
java ×1
javascript ×1
linq ×1
linq-to-sql ×1
mocking ×1
php ×1
propertygrid ×1
ruby ×1
sorting ×1
static ×1
t-sql ×1
tdd ×1
unit-testing ×1
visual-c++ ×1
winforms ×1