小编wom*_*omp的帖子

33
推荐指数
4
解决办法
8242
查看次数

使用Moq"短路"无效方法?

我的团队最近决定使用Moq作为我们的模拟框架,因为它具有极大的灵活性和高度可读的语法.由于我们刚接触它,我在看似简单的问题上磕磕绊绊 - 搜索(这里,谷歌等)找到了关于Moq其他细微差别的大量讨论,但不一定是我所追求的,以及一些看似相关的问题变成了红色的鲱鱼.

我们正在测试一个具有外部依赖关系的类(确切地说是Amazon SimpleDb)但不希望我们的测试绑定到实时连接.一种特殊的方法:

  • 应用一些"业务"逻辑
  • 如果合适,通过我们建立的提供商调用SDB呼叫,让我们称之为 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)

c# methods unit-testing moq mocking

30
推荐指数
1
解决办法
1万
查看次数

Ruby on Rails - 如何以我需要的格式显示日期?从YYYY-MM-DD HH:MM:SS UTC转换为MM/DD/YYYY

我是一个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给了我价值(尝试单独打印).我不知道它给的是哪一个.

关于如何实现格式转换的任何建议?

ruby formatting ruby-on-rails

18
推荐指数
4
解决办法
5万
查看次数

C#simple Event Raising - 使用"sender"与自定义EventArgs

考虑这种情况.我有一个对象,让我们称它为...... 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参数.传递对事件提升对象的引用的最佳实践是什么?

编辑:到目前为止很好的反馈,我会在接受之前将其打开一天左右.

c# events

17
推荐指数
1
解决办法
9146
查看次数

.Net项目的VSS或SVN?

在工作中,一位主管经理让我研究将我的项目的当前源控制服务器(Visual Source Safe)更改为SVN可能带来的好处.

我真的没有任何反对SVN的东西,实际上我有点挖掘它,但我认为,改用SVN不会给项目带来任何重大好处,并会迫使我们使用一些第三方工具来管理来自Visual Studio的源代码控制(我们主要使用Microsoft工具开发).

所以,作为我研究的第一步,我问你:从VSS切换到SVN有什么好处?

.net svn version-control project-planning visual-sourcesafe

16
推荐指数
4
解决办法
7984
查看次数

线程中止离开僵尸事务并破坏SqlConnection

我觉得这种行为不应该发生.这是场景:

  1. 启动一个长期运行的SQL事务.

  2. 运行sql命令的线程被中止(不是我们的代码!)

  3. 当线程返回托管代码时,SqlConnection的状态为"已关闭" - 但该事务仍在sql server上打开.

  4. 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)

.net c# sql-server multithreading thread-abort

16
推荐指数
2
解决办法
4705
查看次数

Microsoft Visual Studio和C#:如何直观地向控件添加事件?

也许这是一个愚蠢的问题,但对于我的生活,我找不到办法做到这一点.

如何使用C#在Microsoft Visual Studio(2008)中向表单中的控件添加事件处理程序?

我可以手动完成,但打开Form的Designer.cs文件,但我无法通过界面找到方法.在MSVC 6中,使用C++和MFC,您可以右键单击或执行其他操作,并查找该控件的所有可能事件的列表.然后你选择它,它会弹出一个窗口,让你创建一个与该事件相关联的方法.在VB中它更容易,您可以在代码中执行它并且它列出了方法下拉列表中的所有事件.

但是,我在2008年用C#找不到任何类似的东西.Intellisense有助于填写正确的方法信息.但是,它总是在Designer.cs文件中创建方法,而不是它应该在的部分类的另一半.

谢谢.

c# events designer visual-studio-2008 visual-studio

14
推荐指数
2
解决办法
2万
查看次数

从任意URL手动实例化Controller实例?

我的技能让我失望了,我知道我已经看到了这个代码,但我找不到它.

获取任意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)

我正在尝试获取控制器的实例,就像路由系统一样,无论代码执行的位置如何.我不清楚如何在这一点上将各个部分组合在一起.虽然我最终会发现它,但我想我可以通过在这里询问来节省时间;)

c# asp.net asp.net-mvc routing controller

14
推荐指数
2
解决办法
9547
查看次数

ASP.net MVC自定义路由处理程序/约束

我需要使用以下网址实现一个MVC网站:

  • 类别1 /产物/ 1 /维基
  • 类别1 /产品/ 2 /维基
  • 类别1 /子类别2 /产品/ 3 /维基
  • 类别1 /子类别2 /子类别3 /产品/ 4 /维基
  • 等等

其中匹配条件是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扩展性选项,所以我想知道实现这个的可能选择是什么?任何样本/示例都会非常棒!

asp.net-mvc constraints asp.net-mvc-routing

13
推荐指数
1
解决办法
1万
查看次数

如何在vb - asp.net中拆分带有多字符分隔符的字符串?

我应该如何在VB中拆分由多字符分隔符分隔的字符串?

即如果我的字符串是 - 大象##猴子,我如何用"##"拆分它?

谢谢!

.net vb.net asp.net string

13
推荐指数
2
解决办法
4万
查看次数