非虚拟方法无法截获

时间:2014-10-15 02:43:39

标签: unit-testing mocking fakeiteasy

我是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检查是否调用该方法。

1 个答案:

答案 0 :(得分:5)

不幸的是,你的头衔就是这么说的。非虚拟成员不能伪造,配置或拦截,如“What members can be overridden?”下的文档中所述。

FakeItEasy没有什么可以为你做的,除非你将会员虚拟化(或将其推广到界面并伪造界面或类似的东西)。