在unit testing中模拟依赖项有什么好处?

我正在为我的控制器和服务层(C#,MVC)进行unit testing。 我正在使用Moq DLL来模拟unit testing中的真实/依赖对象。 但是我对于模拟依赖项或真实对象有点困惑。 让我们举一个下面unit testing方法的例子: – [TestMethod] public void ShouldReturnDtosWhenCustomersFound_GetCustomers () { // Arrrange var name = “ricky”; var description = “this is the test”; // setup mocked dal to return list of customers // when name and description passed to GetCustomers method _customerDalMock.Setup(d => d.GetCustomers(name, description)).Returns(_customerList); // Act List actual = […]

asp.net核心mvc密码validation器

在asp.net核心MVC中自定义密码validation规则的简便方法是什么? 问题就像有人在这里如何在ASP.Net MVC Identity 2中更改密码validation? 唯一的区别是我在Visual Studio 2015中使用asp.net CORE MVC (最新版本)。我想删除所有密码validation规则。 项目中没有ApplicationUserManager类,我也不确定是否可以在Startup.cs文件中自定义UserManagervalidation规则。

IIS在第一个请求中对URL中的双重编码正斜杠的处理方式与后续请求的处理方式不同

最近,我的团队被要求为ASP.NET MVC应用程序实现HttpModule,该应用程序处理IIS 7和.NET 3.5上的双重编码URL。 这是问题的症结所在: 我们有时会获得具有双重编码正斜杠的URL,如下所示: http://www.example.com/%252fbar%5cbaz/foo 还有其他格式我们必须处理,但它们都有一些共同点,它们有一个双重编码的正斜杠。 为了解决这个问题,我们编写了一个HttpModule,它仅在URL具有双重编码的正斜杠时起作用,并且我们将其重定向到一个合理的URL。 细节并不重要,但有两个位: 我们无法控制这些URL具有双重编码正斜杠的事实 我们还没有对.NET 4.0进行过分析,也没有立即开始。 这是问题所在: IIS启动后的第一个请求显示的URL与第二个请求不同。 如果我们使用上面示例中的URL,则对IIS的第一个请求如下所示: http://www.example.com/bar/baz/foo 第二个请求看起来像: http://www.example.com/%252fbar%5cbaz/foo 这是通过在调试时检查Application.Request.Url.AbsolutePath属性来完成的。 这是应该重现问题的最小代码示例(创建一个新的MVC应用程序,并注册以下HttpModule): public class ForwardSlashHttpModule : IHttpModule { internal IHttpApplication Application { get; set; } public void Dispose() { Application = null; } public void Init(HttpApplication context) { Initialize(new HttpApplicationAdapter(context)); } internal void Initialize(IHttpApplication context) { […]

使用log4net以loglevel作为参数进行日志记录

有没有办法使用log4net登录并使用LogLevel作为参数? 也就是说,而不是写作 Log.Debug(“Something went wrong”); 我想写这样的东西: Log(“Something went wrong”, LogLevel.Debug);

编译器生成的事件的后备字段是否始终保证使用与事件相同的名称?

C#允许我们创建自定义事件访问器 。 Action _custom; public event Action Custom { add { _custom = (Action)Delegate.Combine( _custom, value ); } remove { _custom = (Action)Delegate.Remove( _custom, value ); } } 如果未指定它们, 编译器将为您创建它们 。 C#语言规范: 编译类似字段的事件时,编译器会自动创建存储以保存委托,并为事件创建访问器,以便向委托字段添加或删除事件处理程序。 反编译的源代码使用dotPeek进行简单的public event Action Public; 看起来如下: private Action Public; public event Action Public { add { Action action = this.Public; Action comparand; do […]

SQLite连接未出现在实体数据模型向导中

我做了什么来得到我的位置:我使用GAC和VS2012选项从http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki安装了程序集。 我现在可以连接到现有的SQLite数据库,或建立连接并创建新的SQLite数据库文件。 此连接将出现在我的服务器资源管理器中,并且工作正常。 我可以从资源管理器中查看此数据库并更改表等。 但是,当我尝试添加新的ADO.NET实体数据模型时,这个已建立的连接将不会出现在可用的数据连接中。 即使我继续进行新连接, System.Data.SQLite数据库文件选项甚至不在选项列表中。 我尝试单独或与SQLite包一起使用NuGet安装实体包。 我已经尝试过不安装它们或仅将Entity模型与前面提到的程序集一起安装,但SQLite的选项不会出现。 经过谷歌搜索和溢出这个令人沮丧的时间,并发现只有一小部分人显示出与我相同的问题,但没有解决方案对我有用,我来找你帮忙。 经过我所有的努力,我怀疑它归结为我的App.config文件。 我看起来如下: 类似的问题: 数据库首先使用system.data.sqlite 1.0.93创建entity framework6.1.1模型 http://sqlite.1065341.n5.nabble.com/Provider-not-showing-up-in-Net-Model-import-wizard-td75306.html 我使用了vs2012 .NET 4.5,SQLite版本1.0.96.0,实体6.1.3 我希望有人能够帮助我。

如何在使用相对URL时更改http / https协议

协议相对URL 不是我正在寻找的。 我正在寻找一种绝对指定协议(http vs https)的方法,同时保持url相对的主机名。 给定一个相对URL,例如“/ SearchForStuff”,我希望能够指定不同的协议“https vs. http”等,而不必指定主机/域名。 我们的网站有一个标题局部视图,我们在我们网站的每个页面的顶部显示。 网站上的一些页面是http,有些是https。 标题包含用于站点范围搜索的文本框和按钮。 网站搜索结果页面始终使用http提供,因此我们希望表单操作指向相对路径“/ find”。 但是,我们希望在我们的许多内部测试服务器(10.10.10.123等)以及面向公众的服务器(“www.publicfacingserver.com”)上使用相同的标头,理想情况下不会更改标题局部视图的内容。 基本上我正在寻找的是一种为搜索操作指定协议同时保持服务器/主机名相对的方法。 目前,为了确保用户无法从安全页面链接到站点搜索结果的安全页面,我们硬编码用于站点搜索的操作的绝对URL,完成协议和主机名,例如“http://www.publicsite.com/find”。 问题是在测试服务器上单击该操作会将您重定向回我们面向公众的站点。 因此,对于测试,我们对主机文件进行手动编辑,以使测试服务器的IP地址等于面向公众的站点名称。 这给开发人员带来了一些认知负担,并且还要求我们访问我们希望测试我们网站的任何非编码人员的计算机,以便在测试之前配置他们的主机文件,并在测试之后取消配置更改其主机文件。 下面的代码是我提出的最佳解决方案。 有谁知道更好的方法? 如果我的解决方案足够,它是否会产生任何安全漏洞? 我不明白它是怎么回事,因为如果恶意用户向我们面向IP地址X的公众发送请求但主机头中的主机名与该IP地址不匹配,这只会导致URL不稳定被提供给同一个用户。 换句话说,我没有看到任何人可以通过在另一个站点的消息板上发布URL或任何类似的东西来使用它来创建XSRF漏洞: public static string CurrentHostName(this UrlHelper helper, HttpProtocol protocol) { var result = string.Empty; if (protocol == HttpProtocol.Secure) result += “https://”; if (protocol == HttpProtocol.UnSecure) result += “http://”; if (protocol == […]

从nHibernate获取执行的SQL

我正在使用nHibernate ICriteria来执行查询,我希望能够获得在语句运行后执行的SQL。 所以例如我有类似的东西。 ISession session = NHibernateSessionManager.Instance.GetSession(); DetachedCriteria query = BuildCriteria(); // Goes away and constructs the ICriteria var result = query.GetExecutableCriteria(session).List() // somehow here get the sql that was just run string sql = query.GetSqlSomehow(); 我知道我可以记录它并在日志中看到sql,但我想在执行语句后立即获取它,这样我就可以向用户显示SQL(即使它看起来不太好)。

C# – 用户设置已损坏

在阅读标准.Net用户设置时,我们遇到了罕见的exception(这是VS 2008中“项目属性”中的设置): System.Configuration.ConfigurationErrorsException was caught Message=”Configuration system failed to initialize” Source=”System.Configuration” BareMessage=”Configuration system failed to initialize” Line=0 StackTrace: at System.Configuration.ConfigurationManager.PrepareConfigSystem() at System.Configuration.ConfigurationManager.GetSection(String sectionName) at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName) at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() at System.Diagnostics.DiagnosticsConfiguration.Initialize() at System.Diagnostics.DiagnosticsConfiguration.get_IndentSize() at System.Diagnostics.TraceInternal.InitializeSettings() at System.Diagnostics.TraceInternal.get_Listeners() InnerException: System.Configuration.ConfigurationErrorsException Message=”Unexpected end of file has occurred. The following elements are not closed: setting, SettingsTest.Properties.Settings, userSettings, configuration. Line […]

从另一个列表创建列表

让我们说: class Plus5 { Plus5(int i) { i+5; } } List initialList = [0,1,2,3] 我如何从initialList创建另一个为initialList的每个元素调用Plus5()构造函数的列表。 比什么更好? List newList = new List(); initialList.ForEach( i => newList.Add(Plus5(int)));