Property | Value |
---|---|
Rule ID | PosInfoMoq2008 |
Title | The Verify() method must be used only on overridable members |
Category | Compilation |
Default severity | Error |
The Verify()
method must be applied only for overridable members.
An overridable member is a method or property which is in:
- An
interface
. - A non-
sealed
class
. In this case, the member must be:- Defines as
abstract
. - Or defined as
virtual
- Defines as
The Verify()
method must be applied only for overridable members.
For example, the following methods and properties can be mock and used in the Verify()
method:
IService.MethodCanBeMocked()
IService.PropertyCanBeMocked
Service.VirtualMethodCanBeMocked
Service.VirtualPropertyCanBeMocked
Service.AbstractMethodCanBeMocked
Service.AbstractPropertyCanBeMocked
public 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 Verify()
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.