gpt4 book ai didi

.net - FakeItEasy 创建一个假的类

转载 作者:行者123 更新时间:2023-12-04 20:53:21 24 4
gpt4 key购买 nike

我最近尝试使用 FakeItEasy,但如果不解决许多怪癖,我无法从具体类创建 Fake。

我尝试了以下方法:

public class MyObject {
public MyObject(){}
}
...
MyObject fakeObject = A.Fake<MyObject>();

这导致找不到具有匹配参数异常的构造函数

接下来我尝试了:
public class MyObject {
public MyObject(string temp){}
}
...
MyObject fakeObject = A.Fake<MyObject>(x => x.WithArgumentsForConstructor(() => new MyObject("temp")));

这导致了类似的错误。

最后我尝试了:
public class MyObject {
//public MyObject(){}
}
...
MyObject fakeObject = A.Fake<MyObject>();

这让我最终创造了假货。我很困惑为什么大多数伪造具体类的例子都暗示这比我发现的更容易?为什么使用记录的方法,上面的试验#2,没有工作?

伪造没有记录的具体类是否有一些限制?

最佳答案

我认识到这是一个老问题,所以我将这个答案发布给遇到这个问题并偶然发现这个问题的任何人。我能够复制与此类似的问题。

我有一个类:

public class Service : IService
{
public Service (int prNum)
{
//call to a c++ wrapper class (this is where the problem occurs)
//some other calls
}
}

我试图创建服务类作为单元测试的假冒:
private Service fakeServ = A.Fake<Service>((x => x.WithArgumentsForConstructor(() => new Service(3))));

我收到了同样的错误:没有找到具有匹配参数异常的构造函数

最终,我使用调试器进入了 A.Fake 调用,发现构造函数中的代码(A.Fake 确实调用了)由于 Visual Studio 未在管理员模式下运行而无法初始化全局内存块。 (CreateFileMapping,错误代码 5, System Error 0x5: CreateFileMapping())

我将 Visual Studio 设置为以管理员身份运行,问题得到解决,创建了假的。

似乎使用带有参数的构造函数创建的 Fake 确实通过了构造函数(这是我希望通过创建一个 fake 来避免的,因为全局内存不是我的单元测试重点的一部分,我将不得不看看我是否应该以不同的方式创建它)。

您发布的代码并不表示您正在调用包装类或创建全局内存,但您可以尝试使用调试器进入 Fake 创建调用,以查看构造函数是否开始运行以及构造函数是否出现故障,以及什么返回错误。

关于.net - FakeItEasy 创建一个假的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801899/

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