Tag: moles

当测试具有主机类型“Moles”时,无法访问配置文件中的信息

当unit testing的主机类型为“Moles”时,我们在通过unit testing访问.net配置文件(例如app.config和web.config)中的信息时遇到问题。 这引起了不少令人头疼的问题,所以我希望有人知道可以做些什么。 我们正在使用Visual Studio 2010,我相信我们已经在安装了VS 2010 SP1的机器上安装了这个,并且没有安装SP1的机器,以及在32位和64位机器上尝试它。 我冒昧地将测试缩减到最简单的条件。 可以通过组合由以下两个文件组成的unit testing项目来重新创建该问题,并在取消注释唯一的注释行之后运行测试。 测试在没有主机类型的情况下工作,但是当您将Moles作为主机类型引入时,测试中的空断言将失败。 我们不确定为什么。 一,配置文件App.config: 接下来,包含单个测试的测试类: namespace TestProject { using System.Configuration; using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class UnitTest { [TestMethod] //[HostType(“Moles”)] public void TestMethod() { var data = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); Assert.IsNotNull(data.ConnectionStrings.ConnectionStrings[“Connection”]); } } } 如果有人能提供任何见解,我将不胜感激。 非常感谢, 缺口

什么作为模拟IQueryable的提供者

我正在使用Moles并模拟System.Data.Linq.Table。 我把它构造得很好,但是当我使用它时,它需要IQueryable。 提供者也被嘲笑(moled)。 我只是想让它使用普通的Linq To Objects。 知道那会是什么吗? 这是我可以使用的语法: MTable userTable = new System.Data.Linq.Moles.MTable(); userTable.Bind(new List { UserObjectHelper.TestUser() }); // this is the line that needs help MolesDelegates.Func provider = //Insert provider here! ^ userTable.ProviderSystemLinqIQueryableget = provider | | | what can I put here? —————————————-+

使用MS Moles Moling DataContext?

我怎样才能扼杀我在类中使用的DataContext来将消息写入表中。 我想声明LINQ写入的表具有预期的消息计数。 这是我到目前为止所拥有的。 var context = new MJustTestingDataContext(); MyMessagewriter writer = new MyMessageWriter(context); var messageList = new List(); MTable messageTable = new MTable(); messageTable.Bind(messagesLinqList.AsQueryable()); 如果我在测试的类中使用xUnit这个代码,我会得到这个exception Microsoft.Moles.Framework.Moles.MoleNotImplementedException: DataContext.Dispose() was not moled. 我在这里缺少什么以及如何在mole上实现DataContext.Dispose()? 我在没有Pex的情况下独立使用鼹鼠。

如何从HostType(“Moles”)测试中读取UnitTest项目的App.Config

我有以下测试: [TestClass] public class GeneralTest { [TestMethod] public void VerifyAppDomainHasConfigurationSettings() { string value = ConfigurationManager.AppSettings[“TestValue”]; Assert.IsFalse(String.IsNullOrEmpty(value), “No App.Config found.”); } [TestMethod] [HostType(“Moles”)] public void VerifyAppDomainHasConfigurationSettingsMoles() { string value = ConfigurationManager.AppSettings[“TestValue”]; Assert.IsFalse(String.IsNullOrEmpty(value), “No App.Config found.”); } } 它们之间的唯一区别是[HostType(“Moles”)] 。 但第一次通过,第二次失败。 如何从第二次测试中读取App.config? 或者我可以在其他地方添加另一个配置文件?

不为.NET方法生成填充程序

当我开始使用Microsoft Fakes时,我很高兴开始填补一些.NET方法。 我一直相信我能够使用任何.NET方法,静态或不静态: http : //msdn.microsoft.com/en-us/library/hh549176.aspx 。 但是,我一直试图在TcpClient中填充一些方法,只创建了存根,这对我没有好处,因为我希望能够改变一些方法来返回我自己的数据而不是依赖于直播TcpClient给我数据。 如果还有其他超越Microsoft Fakes的方法,我愿意接受有关如何执行此操作的任何建议。 编辑:添加代码来演示问题 [TestMethod] public void CommunicationTest() { var stubbedTcpClient = new System.Net.Sockets.Fakes.StubTcpClient { }; //No such ShimTcpClient exists var shimmedTcpClient = new System.Net.Sockets.Fakes.ShimTcpClient { }; }

使用Moles在unit testing中模拟会话变量

方法我是unit testing检查会话变量之类的 if(Session[“somevar”] != null) { // rest of the code } 在我的测试中,由于Session为null,因此无法摆脱此问题,因此抛出null引用exception。 为了绕过这个,我试着像下面这样嘲笑但没有运气 System.Web.Moles.MHttpContext.AllInstances.SessionGet = (HttpContext cntx) => { return (HttpSessionState)cntx.Session[“somevar”]; } 我甚至尝试过这里提到的方法来模拟HttpContext然后在下面做 HttpContext.Current = new HttpContext(workerRequest); HttpContext.Current.Session[“somevar”] = value; 但再次没有运气。 这一次,虽然HttpContext.Current不是null但是HttpContext.Current.Session因此抛出null refexception。 任何想法如何模拟这个/在我的测试中传递这个[不使用任何外部DLL或主要代码更改。 对不起,但是不能这样做]。 非常感谢和帮助你。

使用Moles的测试没有代码覆盖率信息

在过去的几天里,我已经习惯了OpenCover,并且我注意到使用Moles的测试不会生成任何Coverage信息。 我已经创建了一个小的解决方案来隔离问题,并且发现代码覆盖仅针对没有[HostType(“Moles”)]属性的测试生成。 阅读我发现这个和这似乎是NCover等同于我的问题。 他们说这与运行探查器的Moles以及覆盖工具有关,并且有一个环境变量CLRMONITOR_EXTERNAL_PROFILERS可以设置为允许多个分析器与Moles同时运行 – 我认为这是解决方案在哪里,但我不是100%肯定。 我想变量的值将是OpenCover分析器的名称 – 有谁知道这个名字? 有没有人设法让MoC运行OpenCover? 可以吗?

如何实施Moles隔离框架?

Moles是Microsoft创建的隔离框架。 Moles的一个很酷的function是它可以“模拟”静态/非虚拟方法和密封类(这对于像Moq这样的框架是不可能的)。 以下是Moles可以做的快速演示: Assert.AreNotEqual(new DateTime(2012, 1, 1), DateTime.Now); // MDateTime is part of Moles; the below will “override” DateTime.Now’s behavior MDateTime.NowGet = () => new DateTime(2012, 1, 1); Assert.AreEqual(new DateTime(2012, 1, 1), DateTime.Now); 看起来像Moles能够在运行时修改DateTime.Now之类的CIL主体。 由于Moles不是开源的,我很想知道Moles使用哪种机制来在运行时修改方法的CIL。 谁能摆脱任何光明?