Tag: 模拟

是否可以(使用Moq)使用Lambda参数进行存根方法调用?

如果我这样做: var repository = new Mock<IRepository>(); repository.Setup(x => x.Where(banner => banner.Is.AvailableForFrontend())).Returns(list); “Where”是我的存储库中采用Func<T, ISpecification 。 AvailableForFrontend返回ISpecification的实现,list是存储库的generics类型的IEnumberable。 它编译得很好,但是当我运行我的测试时,我得到以下错误。 —- System.NotSupportedException : Expression banner => Convert((banner.Is.AvailableForFrontend() & banner.Is.SmallMediaBanner())) is not supported. 如果我在存储库中使用Where的其他重载直接进行ISpecification,则没有问题。 所以我的新手模拟/ Moq问题是:我可以使用lamdba作为参数存根方法调用吗? 或者我应该以另一种方式解决这个问题?

我应该使用线程或任务 – 多客户端模拟

我正在编写一个客户端模拟程序,其中所有模拟客户端都针对服务器运行一些预定义的例程 – 这是一个在具有四个实例的azure中运行的Web服务器。 连接到服务器后,所有模拟客户端都运行相同的例程。 在任何时候我都想使用我的程序模拟300到800个客户端。 我的问题是:我应该创建N个客户端类实例并在N个不同的线程中运行它们吗? 要么 我应该使用任务库来做这些事情吗?

webconfig文件中的Windows模拟代码出错

我在webconfig文件中声明了以下部分以允许模拟,我已将该文件夹共享到另一台机器上的网络内的公共访问 ……… ………. 当我运行应用程序时它的抛出错误说 配置错误说明:处理为此请求提供服务所需的配置文件时发生错误。 请查看下面的具体错误详细信息并相应地修改配置文件。 分析器错误消息:无法从配置文件中指定的凭据创建Windows用户令牌。 操作系统登录失败时出错:未知用户名或密码错误。 Aspx页面:我有一个示例aspx页面,我有以下代码将文件从本地机器移动到网络中的其他机器,通过模拟运行 protected void Page_Load(object sender, EventArgs e) { File.Copy(@”C:\temp\CloudURL.txt”, @”\\RemoteMachine\D$\temp\CloudURL.txt”, true); }

无法在unit testing项目中使用ConfigurationManager

我正在尝试为我的项目编写unit testing,但它不会让我使用配置管理器。 现在我的项目设置像 ASP.Net应用程序(所有aspx页面) ProjectCore(所有C#文件 – 模型) ProjectTest(所有测试) 在我的ProjectCore中,我能够从System.Configuration访问ConfigurationManager对象并将信息传递到项目中。 但是,当我运行涉及ConfigurationManager的测试时,我收到错误 System.NullReferenceException: Object reference not set to an instance of an object. 这是测试的一个例子 using System.Configuration; [TestMethod] public void TestDatabaseExists() { //Error when I declare ConfigurationManager Assert.IsNotNull(ConfigurationManager.ConnectionStrings[“ConnectionString”].ConnectionString } 在我的其他测试中,ConfigurationManager.ConnectionStrings [“ConnectionString”]。ConnectionString是我将数据适配器的配置字符串设置为,并在测试时返回null错误,但在我实际使用网站时却没有。 有任何想法吗?

使用C#在另一个应用程序上执行鼠标Click事件

我需要做的是我需要使用我的自定义应用程序控制安装在同一台机器上的另一个应用程序。 例如,如果我需要使用标准的Windows计算器,我只需将输入事件发送到计算器。 我已经使用了一些代码片段来实现这一点,现在我已经触发了鼠标和键盘事件。 但问题是,我可以确定键盘事件将命中目标应用程序,因为它具有进程句柄。 但我无法确定鼠标。 如果目标应用程序进入后台,我也无法启动鼠标点击。 我需要帮助才能找到确保鼠标单击仅在应用程序上完成的方法。 我需要发送鼠标坐标并点击。 例如“ sendMouseClick(“Notepad”, 100, 400);它会向记事本发送一个单击,即使它保持最小化。 ************************************************** *** 重要的提示********************************************* ********以前回答了一个类似的问题,但是参考首先找到另一个应用程序的状态,然后用键盘或鼠标发送输入,我需要做的是发送一个应用程序一套无论应用程序是否处于前台,必须运行的指令。 对于“其他人”::如果你不想帮助或无法帮助,那没关系,但请知道我没有偷过这个问题或任何东西。 我只是想在C#中完成这个任务。 我必须模拟键盘按键的代码是: using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Drawing; using System.Windows.Forms; namespace SimulateKeyPress { partial class Form1 : Form { private Button button1 = new Button(); private Button button2 = new Button(); private Button button3 = new […]

我可以让Moq向mock类添加属性吗?

我正在为我的项目编写命令行界面。 用户输入“create project foo”,它找到负责“project”的控制器,然后调用Create方法,将“foo”作为第一个参数传递。 它在很大程度上依赖于属性和reflection:控制器看起来像这样: [ControllerFor(“project”)] class ProjectController { [ControllerAction(“create”)] public object Create(string projectName) { /* … */ } } 我想在解析器的unit testing中使用Moq,如下所示: Mock controller = new Mock(); controller.Expect(f => f.Create(“foo”)); parser.Register(controller.Object); parser.Execute(“create project foo”); controller.VerifyAll(); 将属性添加到接口似乎不起作用 – 它们不是由派生类inheritance的。 我可以让Moq为被模拟的类添加属性吗?

在与前一个相同的线程中继续执行任务

我有一个WebService,可以创建任务和继续任务。 在第一个任务中我们设置Thread.CurrentPrincipal 因此,当ContinuationTask启动时,它不再具有Thread.CurrentPrincipal。 我想在ContinuationTask中指定它应该在与其前提相同的线程中运行 。 我搜索过网络,但我只发现线程要在SynchronizationContext中运行,因此我开始认为我缺少一些基本规则,特别是关于Thread.Principal应该如何工作。

模仿和NetworkCredential

我需要将具有当前模拟用户凭据的NetworkCredential对象从asp.net应用程序传递给Web服务。 我的代码如下所示: WindowsIdentity windowsIdentity = HttpContext.Current.User.Identity as WindowsIdentity; WindowsImpersonationContext context = windowsIdentity.Impersonate(); try { var client = GetClient(); client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; Log(“WindowsIdentity = {0}”, windowsIdentity.Name); Log(“DefaultNetworkCredentials = {0}”, CredentialCache.DefaultNetworkCredentials.UserName); client.DoSomething(); } finally { context.Undo(); } 我已经了解CredentialCache.DefaultNetworkCredentials应该提供当前模拟用户的凭据,但事实并非如此。 我得到的日志消息是 WindowsIdentity = TESTDOMAIN\TESTUSER DefaultNetworkCredentials = 难道我做错了什么? 如果是这样,您如何获得当前模拟用户的NetworkCredential对象?

使用用户名和密码进行模拟?

WindowsIdentity identity = new WindowsIdentity(accessToken); WindowsImpersonationContext context = identity.Impersonate(); … context.Undo(); 我在哪里声明一个administraotr UserName和Passowrd? accessToken参数对我帮助不大…… 我必须为它导入DLL吗?

应用池身份与假冒身份?

我发现只有一个与此相关的post,但它没有回答这个问题。 我很想知道在web.config中设置模拟用户与在IIS中设置应用程序池标识之间的区别的链接或解释。 他们似乎是独立的,并且对细节差异感到困惑。 谢谢。