使用moq忽略方法

时间:2018-05-16 20:21:54

标签: c# asp.net mocking moq

我有一个名为GetBESummaries的方法,如下所示:

public string GetBESummaries()
{
  CheckPermissions();

  /* rest of the code */
}

public void CheckPermissions()
{
   method1();
   method2();
 }

我正在使用moq编写单元测试方法,我希望我的moq忽略CheckPermissions,这样我就可以避免模拟来自Check Permissions的方法调用列表。我希望阻止控制frm进入CheckPermissions方法。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

在较高的层面上,Moq通过覆盖抽象和虚拟化成员的实现来工作。您需要将权限逻辑分解为抽象类或接口,以便可以覆盖它。在您了解它的同时,请考虑为其提供一种返回类型,以便您可以使用权限类之外的权限验证逻辑执行某些操作。然后,您的主类可以在其构造函数中要求权限对象。例如,

public interface IPermissionsChecker
{
    bool UserHasPermissions( // whatever parameters you need );
}

public class PermissionsChecker : IPermissionsChecker
{
    public override bool UserHasPermissions( // same params as above)
    {
        // logic
    }
}

一旦你在那里,嘲笑它很容易。您只需构建模拟,编写设置逻辑,以了解它在测试中的行为方式,并将其提供给您的消费类。这有助于改进你的封装:如果你想要有不同的方法来确认权限,那只需要向你的构造函数或调用方法提交不同的方法!

var myMock = new Mock<IPermissions>();
myMock.Setup( m => m.UseHasPermissions()).Returns(true);

var classUnderTest = new GenericConsumerClass(myMock);