Tag: rhino mocks

是否有entity framework的内存提供者?

我是针对ADO .NETentity framework编写的unit testing代码。 我想用行填充内存数据库,并确保我的代码正确地检索它们。 我可以用Rhino Mock来嘲笑entity framework,但那还不够。 我会告诉查询什么实体返回给我。 这既不会testingwhere子句也不会testing.Include()语句。 我想确保我的where子句只匹配我打算的行,没有其他的。 我想确定我是否已经要求我需要的实体,而没有我不需要的实体。 例如: class CustomerService { ObjectQuery<Customer> _customerSource; public CustomerService(ObjectQuery<Customer> customerSource) { _customerSource = customerSource; } public Customer GetCustomerById(int customerId) { var customers = from c in _customerSource.Include("Order") where c.CustomerID == customerId select c; return customers.FirstOrDefault(); } } 如果我嘲笑的ObjectQuery返回一个已知的客户填充订单,我怎么知道CustomerService有正确的where子句和包括? 我宁愿插入一些客户行和一些订单行,然后声明select了正确的客户并填写订单。

犀牛嘲讽收到的参数,修改它,并返回?

我试图写这样的东西: myStub.Stub(_ => _.Create(Arg<Invoice>.It.Anything)).Callback(i => { i.Id = 100; return i; }); 我想获得传递给模拟的实际对象,修改它并返回。 这种情况是可能的与犀牛嘲笑?

犀牛嘲弄AssertWasCall(多次)属性获取使用AAA

我有一个模拟对象作为构造函数parameter passing给另一个对象。 我怎样才能testing一个模拟对象的属性被调用? 这是我目前正在使用的代码: INewContactAttributes newContact = MockRepository.GenerateMock<INewContactAttributes>(); newContact.Stub(x => x.Forenames).Return("One Two Three"); someobject.ConsumeContact(newContact); newContact.AssertWasCalled(x => { var dummy = x.Forenames; }); 这个工作除了在“someobject”Forenames属性上的吸气剂多次使用。 那就是当我得到“Rhino.Mocks.Exceptions.ExpectationViolationException:INewContactAttributes.get_Forenames();预期#1,实际#2 ..” 简单使用 newContact.AssertWasCalled(x => { var dummy = x.Forenames; }, options => options.Repeat.Any()); 不起作用,并给出下面的错误: “期待已经从等待的期望列表中删除,你是否调用了Repeat.Any()?这在AssertWasCalled()中不受支持。 那么如何迎合多个电话呢?

如何清除以前的对象的期望?

我想设置一个返回值 _stubRepository.Stub(Contains(null)).IgnoreArguments().Return(true); 但是在特定的testing中,重写该期望返回false。 就像是: _stubRepository.ClearExpectations(); //<- this does not exist, I'm just making something up _stubRepository.Stub(Contains(null)).IgnoreArguments().Return(false); 注意,我不希望在第二次调用时返回false,我想覆盖第一个期望值。 这将有助于大大简化我的testing场景。

Castle DynamicProxy – 创build代理涉及用作GTR的GTP时失败

好的,现在我真的很困惑。 我原本就有这个问题 ,根据海报,Castle.DynamicProxy的版本被ILMerged到最新的Rhino.Mocks库中。 根据这个问题,有几个权威人士已经在最新的城堡里定下了这个图书馆,但是这个图书馆并没有把它变成一个新的犀牛。 大多数人都在说“只要下载Rhino源码和最新的Castle,build立你自己的版本”。 所以,我就是这么做的。 我从Ayende的GitHub抓取了犀牛干货源的一个ZIP,打开它,然后build立它。 然后,就像一个很好的TDDer,我创build了一个unit testing,以确保我的更改能够正常工作(因为最新的Castle将DynamicProxy折叠到Core中,需要一些重要的引用更改): [Test] public void MockOfInterfaceMethodWithInterfaceGTR() { var mock = mocks.DynamicMock<ITestRestrictedInterface>(); Assert.NotNull(mock); Expect.Call(mock.TestMethod(new Object2())).IgnoreArguments().Return(5); mocks.ReplayAll(); Assert.AreEqual(5, mock.TestMethod(new Object2())); } … internal interface ITestGenericInterface<TRest> where TRest:IObject1 { int TestMethod<T>(T input) where T : TRest; } internal interface ITestRestrictedInterface:ITestGenericInterface<IObject2> { } internal interface IObject1 { } internal interface IObject2:IObject1 { […]

使用C#和RhinoMocks进行testing驱动开发的最佳实践

为了帮助我的团队编写可testing的代码,我想出了这个简单的使我们的C#代码库更可testing的最佳实践列表。 (有些观点指的是Rhino Mocks的限制,这是C#的嘲讽框架,但规则也可能更普遍适用。)有没有人有任何最佳实践,他们遵循? 要最大化代码的可testing性,请遵循以下规则: 先写testing,然后写代码。 原因:这可以确保您编写可testing的代码,并且每行代码都会为其编写testing。 使用dependency injectiondevise类。 原因:你不能模拟或testing什么是看不到的。 使用Model-View-Controller或Model-View-Presenter将UI代码与其行为分开。 原因:允许testing业务逻辑,而不能testing的部分(UI)被最小化。 不要写静态方法或类。 原因:静态方法很难或不可能被隔离,Rhino Mock无法嘲笑它们。 编程接口,而不是类。 原因:使用接口澄清对象之间的关系。 接口应该定义一个对象在其环境中需要的服务。 此外,使用Rhino Mocks和其他模拟框架可以轻松地模拟界面。 隔离外部依赖。 原因:无法testing未parsing的外部依赖关系。 将虚拟的方法标记为虚拟的方法。 原因:Rhino Mocks无法模拟非虚拟方法。

嘲笑Asp.net-mvc控制器上下文

所以控制器上下文取决于一些asp.net内部。 有什么方法可以干净地模拟这些unit testing? 似乎很容易阻塞testing吨设置时,我只需要,例如,Request.HttpMethod返回“GET”。 我在网上看过一些例子/帮手,但有些是过时的。 认为这将是保持最新和最好的一个好地方。 我正在使用最新版本的犀牛嘲笑

如何在ASP.Net MVC模拟控制器上的请求?

我有一个控制器在C#使用ASP.Net MVC框架 public class HomeController:Controller{ public ActionResult Index() { if (Request.IsAjaxRequest()) { //do some ajaxy stuff } return View("Index"); } } 我有一些嘲讽的技巧,并希望用以下和RhinoMockstesting代码 var mocks = new MockRepository(); var mockedhttpContext = mocks.DynamicMock<HttpContextBase>(); var mockedHttpRequest = mocks.DynamicMock<HttpRequestBase>(); SetupResult.For(mockedhttpContext.Request).Return(mockedHttpRequest); var controller = new HomeController(); controller.ControllerContext = new ControllerContext(mockedhttpContext, new RouteData(), controller); var result = controller.Index() as ViewResult; Assert.AreEqual("About", […]