c# - 使用 rhino mock 的 lambda 单元测试失败

标签 c# unit-testing lambda rhino-mocks

如果我有这个测试

Expect.Call(_session.Single<Admin>(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)); Expected #1, Actual #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 message = userModel.FirstName + " " + userModel.LastName + " s'est inscrit au système d'enquête en ligne, veuillez confirmer son inscription.";
            member.PasswordExpire = DateTime.Now.AddDays(-1);
            member.Phone = userModel.Phone;
            member.MemberNumber = userModel.MemberNumber;
            member.PasswordExpire = DateTime.Now.AddDays(-1);

            Expect.Call(_session.Single<Admin>(x => x.Email == userModel.Email)).Repeat.Once().Return(null);
            Expect.Call(_session.Single<Member>(x => x.Email == userModel.Email)).Repeat.Once().IgnoreArguments().Return(null);
            Expect.Call(_authService.GeneratePassword()).Repeat.Once().Return(tempPassword);
            Expect.Call(_authService.MemberRole).Repeat.Once().Return(returnMemberRole);
            Expect.Call(_authService.RegisterUser(userModel.Email, tempPassword, returnMemberRole)).Repeat.Once().Return(MembershipCreateStatus.Success);
            _session.Add(member);
            LastCall.Repeat.Once();
            _session.CommitChanges();
            LastCall.Repeat.Once();
            Expect.Call(_configHelper.GetValue("emailSubscription")).Repeat.Once().Return(emailSubscription);
            Expect.Call(_configHelper.GetValue("subjectNotification")).Repeat.Once().Return(subjectNotification);
            Expect.Call(_configHelper.GetValue("MailUseSSL")).Repeat.Once().Return(mailUseSSL);
            _mailHelper.SendMail(emailSubscription, subjectNotification, message, Convert.ToBoolean(mailUseSSL));
            LastCall.Repeat.Once();

            _mock.ReplayAll();
            var result = _controller.Register(userModel);

            _mock.VerifyAll();
            result.AssertActionRedirect().ToAction<MemberController>(c => c.RegisterSuccess());

        }

谢谢!

最佳答案

单元测试中的 lambda 编译成类级方法(单元测试中的方法)。在您的 Controller 内部,一个不同的 lambda 编译成类级方法(在 Controller 内部)。使用了两种不同的方法,因此 Rhino Mocks 显示了预期误差。更多信息:http://groups.google.com/group/rhinomocks/browse_frm/thread/a33b165c16fc48ee?tvc=1

关于c# - 使用 rhino mock 的 lambda 单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354968/

相关文章:

单元测试中 ManagedObject 上的 swift 核心数据错误命名空间

c++ - 如何在 C++ 的模板定义中使用 lambda?

amazon-web-services - 无法以编程方式调用 AWS lambda

c++ - 通过 lambda 实现纯虚函数

c# - 调试C#GUI

c# - 使用堆栈面板 - 垂直 + 水平

c# - 按搜索字符串过滤 CollectionViewSource - 绑定(bind)到 itemscontrol (WPF MVVM)

c# - 向模态弹出窗口添加样式

java - 如何对构造函数进行单元测试

unit-testing - Gradle忽略了我的Spock单元测试之一,并没有告诉我为什么