Setup()/SetupSequence()/SetupSet() method must be used only on overridable members| Property | Value |
|---|---|
| Rule ID | PosInfoMoq2001 |
| Title | The Setup()/SetupSequence()/SetupSet() method must be used only on overridable members |
| Category | Compilation |
| Default severity | Error |
The Setup(), SetupSequence() or SetupSet() methods must be applied only for overridable members.
An overridable member is a method or property which is in:
interface.sealed class. In this case, the member must be:
abstract.virtualThe Setup(), SetupSequence() and SetupSet() methods must be applied only for overridable members.
For example:
Setup() and SetupSequence() method:
IService.MethodCanBeMocked()IService.PropertyCanBeMockedService.VirtualMethodCanBeMockedService.VirtualPropertyCanBeMockedService.AbstractMethodCanBeMockedService.AbstractPropertyCanBeMockedSetupSet() method:
IService.PropertyCanBeMockedService.VirtualPropertyCanBeMockedService.AbstractPropertyCanBeMockedpublic interface IService
{
void MethodCanBeMocked();
string PropertyCanBeMocked { get; set; }
}
public abstract class Service
{
public virtual void VirtualMethodCanBeMocked() { ... }
public virtual void VirtualPropertyCanBeMocked() { ... }
public abstract void AbstractMethodCanBeMocked();
public abstract void AbstractPropertyCanBeMocked();
}
NOTE: The extension methods can not be overriden. The C# syntax looks like a member method an interface or class, but the extension method are just simple static methods which can not be overriden.
To fix a violation of this rule, be sure to mock a member in the Setup(), SetupSequence() or SetupSet() method which can be overriden.
Do not suppress an error from this rule. If bypassed, the execution of the unit test will be failed with a MoqException
thrown with the “Unsupported expression: m => m.Method(). Non-overridable members (here: Namespace.Class.Method) may not be used in setup / verification expressions.” message.