【发布时间】:2014-11-27 15:19:13
【问题描述】:
我有一个抽象类:
public abstract class MyClass
{
protected abstract bool IsSavable();
protected bool IsExecutable()
{
//New mode or edit mode
if (ViewMode == ViewMode.New || ViewMode == ViewMode.Edit)
{
return IsSavable();
}
//Search mode
if (ViewMode == ViewMode.Search)
{
return true;
}
return false;
}
}
我想对这个类进行单元测试。因此,我需要模拟“IsSavable”方法。它应该总是返回“true”。
我知道如何用 Moq 模拟我的抽象类。但是如何模拟我的抽象受保护方法使其返回 true?
函数 IsSavable 在我的抽象类中由具体方法 (IsExecuteable) 调用。我想测试这个方法。我知道你们中的大多数人会建议在实现“IsSavable”的类中进行测试。不幸的是,这将是很多类,我只想测试我的方法 IsExecutable 一次。
【问题讨论】:
-
可能你不知道。我更喜欢只测试公共方法。
-
测试抽象方法的意义何在?没有实现。
-
@Vadim @Michael 为什么你们认为这是关于测试
IsSavable方法?如果 OP 需要测试MyClass的任何实例成员,他将需要从MyClass派生的 some 类的实例。 Something 必须提供IsSavable的实现。这可以是来自项目其他地方的真实的(在这种情况下,将不清楚正在测试哪个类),也可以是为了这个测试而创建的子类,这是我所提倡的。或者它可能是一个模拟,尽管我认为在这种情况下不需要这样做。 -
我已经更新了问题。希望这能说明问题。
标签: c# unit-testing moq