【问题标题】:Non virtual methods can not be intercepted非虚方法不能被拦截
【发布时间】:2021-12-14 23:33:53
【问题描述】:

我是 FakeItEasy 的新手并尝试解决问题。

我有课

 public class Events
 {
 public List<Events> SaveEvents()
 {
 // Call to repository and return 1(success) or -1(fail)
 //If the repository return 1 then need to make another call to save the action in db
 //Sample Code here
   AuditLogService log = new AuditLogService();
   log.CallLog();
 }
 }

这是测试代码:

    [TestMethod]
    public void EventValidation()
    {
        //Arrange           

         var Fakeevents = A.Fake<Events>();
         var log = A.Fake<AuditLogService>();
         var _EventsController = new EventsController(Fakeevents);
        _EventsController.SaveEvents();
        A.CallTo(
             () => Fakeevents.SaveEvents().Retunr(1).AssignsOutAndRefParameters(status)
         A.CallTo(
             () => log.CallLog()).MustHaveHappened(Repeated.AtLeast.Once);
    } 
 I am getting error like "Non virtual methods can not be intercepted"

我想检查调用成功后是否调用了Calllog方法。

谁能帮帮我。

我有一个方法,在一个方法内我正在启动另一个类并调用该类的方法。我想从 fakeItEasy 检查是否调用了该方法。

【问题讨论】:

    标签: unit-testing mocking fakeiteasy


    【解决方案1】:

    很遗憾,您的标题说明了一切。如“What members can be overridden?”下的文档中所述,非虚拟成员不能被伪造、配置或拦截。

    FakeItEasy 无法为您做任何事情,除非您将成员设为虚拟(或将其提升为界面并伪造界面,或类似的东西)。

    【讨论】:

      【解决方案2】:

      你尝试过使用函数吗? 像这样:

      Func<YourReturnType> action = () => YourMethod(params); // Act
      
      action.Should().Throw<Exception>(); // Assert
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-15
        • 2012-11-04
        • 2020-03-29
        • 2021-05-17
        • 2013-05-23
        • 2011-04-16
        • 1970-01-01
        • 2015-10-04
        相关资源
        最近更新 更多