gpt4 book ai didi

c# - Moq + 单元测试——我如何将一个 Action 传递给我的类以测试该 Action 是否被调用?

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:08 24 4
gpt4 key购买 nike

基本上,我的类中有一个调用 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 ,或者您可能有其他设置操作的方法。但是思路应该很清晰。

关于c# - Moq + 单元测试——我如何将一个 Action 传递给我的类以测试该 Action 是否被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7729926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com