在ASP.NET MVC中哪一个更好用?
我的团队最近决定使用Moq作为我们的模拟框架,因为它具有极大的灵活性和高度可读的语法.由于我们刚接触它,我在看似简单的问题上磕磕绊绊 - 搜索(这里,谷歌等)找到了关于Moq其他细微差别的大量讨论,但不一定是我所追求的,以及一些看似相关的问题变成了红色的鲱鱼.
我们正在测试一个具有外部依赖关系的类(确切地说是Amazon SimpleDb)但不希望我们的测试绑定到实时连接.一种特殊的方法:
SaveItem()我想对这进行单元测试,以便我们设置所需的上下文并确保SaveItem()调用它,但是以一种SaveItem()真正未被调用的方式(因为A)SDB的提供者是一个没有完全补充的模拟器,并且可能会炸弹和B)我不想为这笔交易付出数十万次).
在处理返回值的方法时,这很简单.
mockDb.Setup(d => d.GiveMeSomething()).Returns("Foo");
Run Code Online (Sandbox Code Playgroud)
在我概述的情况下,我的" SaveItem()"方法是无效的,因此使用Moq Returns()方法的选项不可用.虽然我可以设置一个回调来验证是否SaveItem()被调用,但我似乎无法让它实际上没有做任何事情.
天真/充满希望,我认为以下内容可行,但似乎仍然会调用该方法:
mockDb.Setup(d => d.SaveItem(It.IsAny<object>()));
Run Code Online (Sandbox Code Playgroud)
所以百万美元的问题:以下虚构代码的Moq是什么?
mockDb.Setup(d => d.SaveItem(It.IsAny<object>())).STOP_RIGHT_HERE();
Run Code Online (Sandbox Code Playgroud) 我是一个RoR新手.我尝试了很多东西,最后来到了以下:
<td>
<%= Date.strptime(request.baseline_start_date, "%Y-%M-%D %H:%M:%S %Z").strftime("%M/%D/%Y")%>
</td>
Run Code Online (Sandbox Code Playgroud)
但这也给了我一个错误:
$_ value need to be String (nil given)
Run Code Online (Sandbox Code Playgroud)
但我知道request.baseline_start_date给了我价值(尝试单独打印).我不知道它给的是哪一个.
关于如何实现格式转换的任何建议?
考虑这种情况.我有一个对象,让我们称它为...... Foo.Foo引发了一个名为"Loaded"的简单事件.作为活动信息的一部分,消费者需要知道哪个foo对象引发了该事件.我们的团队采用了以下模式.
1)创建一个继承自EventArgs的新类 - 例如,FooEventArgs:System.EventArgs.
2)将类型为Foo的属性添加到FooEventArgs中,该属性通过构造函数传入来设置.
3)使用EventHandler的通用版本声明事件,所以
public event EventHandler<FooEventArgs> Loaded;
Run Code Online (Sandbox Code Playgroud)
4)使用以下签名从Foo类提升事件:
Loaded(this, new FooEventArgs(this));
Run Code Online (Sandbox Code Playgroud)
本质上它的作用是使"发送者"成为foo对象,但它也将foo对象引用作为强类型属性放入事件参数中.
这样做的一个优点是,当他们处理事件时,没有人必须打扰"发送者",这降低了事件消费者和事件提升者之间的耦合.另一个"优势"是,如果事件提升者的类型必须改变,因此强类型属性(希望永远不会发生),那么当它作为null出现时,不是简单地让代码在转换时开始失败, API实际上已经破解,因此可以在编译时修复.
对我来说,这种模式似乎有点矫枉过正.他们应该更多地信任"sender"参数,并放弃自定义事件参数吗?我的团队认为没有人真正使用sender参数.传递对事件提升对象的引用的最佳实践是什么?
编辑:到目前为止很好的反馈,我会在接受之前将其打开一天左右.
在工作中,一位主管经理让我研究将我的项目的当前源控制服务器(Visual Source Safe)更改为SVN可能带来的好处.
我真的没有任何反对SVN的东西,实际上我有点挖掘它,但我认为,改用SVN不会给项目带来任何重大好处,并会迫使我们使用一些第三方工具来管理来自Visual Studio的源代码控制(我们主要使用Microsoft工具开发).
所以,作为我研究的第一步,我问你:从VSS切换到SVN有什么好处?
我觉得这种行为不应该发生.这是场景:
启动一个长期运行的SQL事务.
运行sql命令的线程被中止(不是我们的代码!)
当线程返回托管代码时,SqlConnection的状态为"已关闭" - 但该事务仍在sql server上打开.
SQLConnection可以重新打开,你可以尝试在事务上调用回滚,但它没有效果(不是我期望这种行为.重点是没有办法访问数据库上的事务并滚动它背部.)
问题只是在线程中止时没有正确清理事务.这是.Net 1.1,2.0和2.0 SP1的问题.我们正在运行.Net 3.5 SP1.
这是一个说明问题的示例程序.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Threading;
namespace ConsoleApplication1
{
class Run
{
static Thread transactionThread;
public class ConnectionHolder : IDisposable
{
public void Dispose()
{
}
public void executeLongTransaction()
{
Console.WriteLine("Starting a long running transaction.");
using (SqlConnection _con = new SqlConnection("Data Source=<YourServer>;Initial Catalog=<YourDB>;Integrated Security=True;Persist Security Info=False;Max Pool Size=200;MultipleActiveResultSets=True;Connect Timeout=30;Application Name=ConsoleApplication1.vshost"))
{
try
{
SqlTransaction trans = null;
trans = _con.BeginTransaction(); …Run Code Online (Sandbox Code Playgroud) 也许这是一个愚蠢的问题,但对于我的生活,我找不到办法做到这一点.
如何使用C#在Microsoft Visual Studio(2008)中向表单中的控件添加事件处理程序?
我可以手动完成,但打开Form的Designer.cs文件,但我无法通过界面找到方法.在MSVC 6中,使用C++和MFC,您可以右键单击或执行其他操作,并查找该控件的所有可能事件的列表.然后你选择它,它会弹出一个窗口,让你创建一个与该事件相关联的方法.在VB中它更容易,您可以在代码中执行它并且它列出了方法下拉列表中的所有事件.
但是,我在2008年用C#找不到任何类似的东西.Intellisense有助于填写正确的方法信息.但是,它总是在Designer.cs文件中创建方法,而不是它应该在的部分类的另一半.
谢谢.
我的技能让我失望了,我知道我已经看到了这个代码,但我找不到它.
获取任意URL的最快方法是什么,通过asp.net mvc路由系统运行它,并在另一端引用控制器实例?
例如,代码执行在一些任意控制器方法中.我想做这样的事情:
...
string myURL = "http://mysite/mycontroller/myaction/myparameters";
RouteData fakeRouteData = new RouteData(Route???, IRouteHandler???)
RequestContext ctxt = new RequestContext(this.ControllerContext.HttpContext,
fakeRouteData);
ControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
Controller result = factory.CreateController(ctxt, controllername???)
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取控制器的实例,就像路由系统一样,无论代码执行的位置如何.我不清楚如何在这一点上将各个部分组合在一起.虽然我最终会发现它,但我想我可以通过在这里询问来节省时间;)
我需要使用以下网址实现一个MVC网站:
其中匹配条件是url以"wiki"结尾.
不幸的是,下面的catch-all仅适用于url的最后部分:
routes.MapRoute("page1", // Route name
"{*path}/wiki", // URL with parameters
new { controller = "Wiki", action = "page", version = "" } // Parameter defaults
Run Code Online (Sandbox Code Playgroud)
我没有时间通过MVC扩展性选项,所以我想知道实现这个的可能选择是什么?任何样本/示例都会非常棒!
我应该如何在VB中拆分由多字符分隔符分隔的字符串?
即如果我的字符串是 - 大象##猴子,我如何用"##"拆分它?
谢谢!
c# ×5
.net ×3
asp.net ×3
asp.net-mvc ×3
events ×2
ajax ×1
constraints ×1
controller ×1
designer ×1
formatting ×1
jquery ×1
methods ×1
mocking ×1
moq ×1
routing ×1
ruby ×1
sql-server ×1
string ×1
svn ×1
thread-abort ×1
unit-testing ×1
vb.net ×1