Tag: rhino mocks

模拟IEnumerable 类型的GetEnumerator()方法

以下测试用例在rhino mocks中失败: [TestFixture] public class EnumeratorTest { [Test] public void Should_be_able_to_use_enumerator_more_than_once() { var numbers = MockRepository.GenerateStub(); numbers.Stub(x => x.GetEnumerator()).Return(new List { 1, 2, 3 }.GetEnumerator()); var sut = new ObjectThatUsesEnumerator(); var correctResult = sut.DoSomethingOverEnumerator2Times (numbers); Assert.IsTrue(correctResult); } } public class ObjectThatUsesEnumerator { public bool DoSomethingOverEnumerator2Times(INumbers numbers) { int sum1 = numbers.Sum(); // returns 6 int […]

模拟迭代行为

我有一个迭代行为的界面,我在Rhinomocks模拟它时遇到了麻烦。 示例接口和类是我的问题的一个非常简单的版本。 每次调用LineReader.Read()时,LineReader.CurrentLine()都应该返回一个不同的值 – 下一行。 到目前为止,我还没有能够在模拟中重现这种行为。 因此,它已成为我的一个小业余爱好项目,我不时回到这里。 我希望你能帮助我更进一步。 internal class LineReader : ILineReader { private readonly IList _lines; private int _countOfLines; private int _place; public LineReader(IList lines) { _lines = lines; _countOfLines = lines.Count; _place = 0; } public string CurrentLine() { if (_place<_countOfLines) { return _lines[_place]; } else { return null; } } public […]

使用rhino mock进行lambdaunit testing失败

如果我有这个测试 Expect.Call(_session.Single(x => x.Email == userModel.Email)).Repeat.Once().Return(null); 告诉我 Rhino.Mocks.Exceptions.ExpectationViolationException:ISession.Single(x =>(x.Email == value(Enquete.Test.Controllers.MemberControllerTest + c__DisplayClassb).userModel.Email)); 期望#1,实际#0。 它失败但如果我添加.IgnoreArguments()它可以工作。 是否可以使用lambda进行测试? 如果我调试我可以看到我的电子邮件是相同的。 这是完整的测试: [Test] public void Register_Post_ReturnRedirectOnSuccess() { _builder.InitializeController(_controller); var userModel = TestHelper.CreateMemberModel(); var returnMemberRole = “Member”; var tempPassword = “Val1dPass”; var member = TestHelper.CreateMember(userModel); var emailSubscription = “subscription@corpiq.com”; var subjectNotification = “sujet du meessaaggee”; var mailUseSSL = “true”; var […]

Rhinomocks – 嘲笑代表

public interface IServiceInvoker { R InvokeService(Func invokeHandler) where T : class; } public class MediaController : Controller { private IServiceInvoker _serviceInvoker; public MediaController(IServiceInvoker serviceInvoker) { _serviceInvoker = serviceInvoker; } public JsonResult GetAllMedia() { var media = _serviceInvoker.InvokeService<IMediaService, List>(proxy => proxy.GetAllMediaInJson()); JsonResult jsonResult = new JsonResult(); jsonResult.Data = media; jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet; return jsonResult; } [TestClass] […]

如何断言调用了一个动作

我需要资产一个由模拟组件调用的动作。 public interface IDispatcher { void Invoke(Action action); } public interface IDialogService { void Prompt(string message); } public class MyClass { private readonly IDispatcher dispatcher; private readonly IDialogservice dialogService; public MyClass(IDispatcher dispatcher, IDialogService dialogService) { this.dispatcher = dispatcher; this.dialogService = dialogService; } public void PromptOnUiThread(string message) { dispatcher.Invoke(()=>dialogService.Prompt(message)); } } ..and in my test.. [TestFixture] […]

使用RhinoMocks进行unit testing和模拟

我正在尝试为我的新项目设置测试并遇到一些困难。 我正在使用NUnit和Rhino Mocks。 我试图测试的代码是这样的, public DocumentDto SaveDocument(DocumentDto documentDto) { Document document = null; using (_documentRepository.DbContext.BeginTransaction()) { try { if (documentDto.IsDirty) { if (documentDto.Id == 0) { document = CreateNewDocument(documentDto); } else if (documentDto.Id > 0) { document = ChangeExistingDocument(documentDto); } document = _documentRepository.SaveOrUpdate(document); _documentRepository.DbContext.CommitChanges(); } } catch { _documentRepository.DbContext.RollbackTransaction(); throw; } } return MapperFactory.GetDocumentDto(document); } […]

如何使用Success == true构造IdentityResult

我有一个注入了Microsoft.AspNet.Identity.UserManager的类,我希望userManager.CreateAsync(user,password)方法返回一个IdentityResult.Succeeded = true的Task。 但是,IdentityResult唯一可用的构造函数是失败构造函数,它们将导致Succeeded属性为false。 如何创建具有Succeeded == true的IdentityResult? IdentityResult没有实现接口,而且Succeeded不是虚拟的,所以我没有看到任何通过Rhino Mocks(我用作我的模拟框架)创建模拟对象的明显方法。 我的方法做了类似下面的事情。 提供此示例以说明为什么我可能想要模拟它。 public async Task RegisterUser(NewUser newUser) { ApplicationUser newApplicationUser = new ApplicationUser() { UserName = newUser.UserName, Email = newUser.Email }; IdentityResult identityResult = await applicationUserManager.CreateAsync(newApplicationUser, newUser.Password); if(identityResult.Succeeded) { someOtherDependency.DoSomethingAmazing(); } return identityResult; } 我正在尝试编写unit testing,以确保在identityResult.Succeeded为true时调用someOtherDependency.DoSomethingAmazing()。 谢谢你的帮助!

什么是犀牛模拟重复?

什么是犀牛模拟重复? Repeat.Any(); Repeat.Once(); 它是什么意思以及它是如何工作的?

呼叫无效,最后一次呼叫已被使用或未进行任何呼叫

当我尝试将mock设置为具有PropertyBehavior()时,我收到此错误: System.InvalidOperationException:System.InvalidOperationException:无效调用,最后一次调用已被使用或未进行任何调用(请确保您正在调用虚拟(C#)/ Overridable(VB)方法)。 我试图只使用Rhino Mocks 3.5 (安排,行动,断言) 这是我的代码: private IAddAddressForm form; private AddAddressMediator mediator; [TestInitialize()] public void MyTestInitialize() { form = MockRepository.GenerateMock(); mediator = new AddAddressMediator(form); // Make the properties work like a normal property Expect.Call(form.OKButtonEnabled).PropertyBehavior(); //I tried this too. I still get the exception //SetupResult.For(form.OKButtonEnabled).PropertyBehavior(); } [TestMethod] public void TestOKButtonEnabled() { form.OKButtonEnabled = true; […]

订购方法使用Rhino-Mock存根返回值

我开始尝试使用Rhino-Mocks(3.6),同时阅读Roy Osherove的unit testing艺术 。 他有一个示例,演示了当使用相同的参数调用两次时,可以使用mocked方法编写脚本以返回不同的结果: [Test] public void ReturnResultsFromMock() { MockRepository repository = new MockRepository(); IGetRestuls resultGetter = repository.DynamicMock(); using(repository.Record()) { resultGetter.GetSomeNumber(“a”); LastCall.Return(1); resultGetter.GetSomeNumber(“a”); LastCall.Return(2); resultGetter.GetSomeNumber(“b”); LastCall.Return(3); } int result = resultGetter.GetSomeNumber(“b”); Assert.AreEqual(3, result); int result2 = resultGetter.GetSomeNumber(“a”); Assert.AreEqual(1, result2); int result3 = resultGetter.GetSomeNumber(“a”); Assert.AreEqual(2, result3); } 这很好用。 但是当我使用Stub和接受并返回字符串的方法尝试相同的事情时,我无法生成第二个返回值: [Test] public void StubMethodWithStringParameter_ScriptTwoResponses_SameResponseReceived() { MockRepository […]