我有一个名为GetBESummaries的方法,如下所示:
public string GetBESummaries()
{
CheckPermissions();
/* rest of the code */
}
public void CheckPermissions()
{
method1();
method2();
}
我正在使用moq编写单元测试方法,我希望我的moq忽略CheckPermissions,这样我就可以避免模拟来自Check Permissions的方法调用列表。我希望阻止控制frm进入CheckPermissions方法。实现这一目标的最佳方法是什么?
答案 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);