gpt4 book ai didi

c# - 如何验证我的 Func 在测试方法中被调用

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:05 27 4
gpt4 key购买 nike

我的泛型类在构造函数中采用 Func 参数,我想测试它的一种方法,该方法基本上调用构造函数参数。
我使用 Moq,在我的测试代码中是这样的:

[Fact]
public void Construct_EnsureInvokeFunction()
{
_objectToTest=new TypeToTest<T>(It.IsAny<Func<T>>());
_objectToTest.Construct();
//here I want to ensure that the passed parameter is invoked
//however since I can't mock Func<T>, I dont know how to verify
//whether Invoke method of Func<T> is triggered
}

我能想到的一个解决方法是将我的 Func 包装在一个新接口(interface)中并创建一个方法来包装它的 Invoke 方法,然后使用 Moq 模拟该接口(interface)。然而,它似乎并不有效。

我错过了什么吗?任何想法将不胜感激。

谢谢,

安东

最佳答案

您可以创建一个简单的伪造 Func<T>关闭副作用并验证这些副作用。一个好的方法是增加一个局部变量,因为它还可以让您断言它没有被调用超过它应该调用的次数。像这样:

int counter = 0;
Func<T> f = () => { counter++; return fakeT; }
var objectToTest = new TypeToTest<T>(f);
objectToTest.Construct();
Assert.Equal(1, counter);

关于c# - 如何验证我的 Func<T> 在测试方法中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4693790/

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