基本上,我的类中有一个调用 Action<T>
的方法如果满足某些条件。如何进行单元测试以确保调用操作?
public class MyClass<T>
{
private IDBService _dbService;
private Action<T> _action;
public MyClass(IDBService dbService, Action<T> action)
{
if (dbService == null) throw new ArgumentNullException("dbService");
if (action == null) throw new ArgumentNullException("action");
_dbService = dbService;
_action = action;
}
public void CallActionIfPossible(T param)
{
if (_dbService.IsTopUser)
action(param);
}
}
嗯,基本的想法是 Action<T>
在某处产生一些状态变化(如果没有,那有什么意义?)。因此,单元测试在条件成立时会发生预期的状态更改,而在条件不成立时不会发生预期的状态更改。
当然,理想情况下,您可以模拟 Action<T>
这样状态测试就 super 容易了。您不需要 Moq 或任何其他模拟框架:
bool actionWasInvoked = false;
Action<Foo> action = foo => actionWasInvoked = true;
Bar<Foo> bar = new Bar<Foo>();
// set up conditions that should guarantee action is invoked
bar.M(action);
Assert.IsTrue(actionWasInvoked);
和
bool actionWasInvoked = false;
Action<Foo> action = foo => actionWasInvoked = true;
Bar<Foo> bar = new Bar<Foo>();
// set up conditions that should guarantee action is NOT invoked
bar.M(action);
Assert.IsFalse(actionWasInvoked);
当然,我不知道您的确切设置。也许你传入 action
关于 Bar
的 build ,或者您可能有其他设置操作的方法。但是思路应该很清晰。
我是一名优秀的程序员,十分优秀!