.net 伪造类创建一个假类

.net 伪造类创建一个假类,.net,mocking,fakeiteasy,.net,Mocking,Fakeiteasy,最近我试图使用FakeiTasy,但如果不解决许多怪癖,我无法从一个具体的类中创建一个假类 我尝试了以下方法: public class MyObject { public MyObject(){} } ... MyObject fakeObject = A.Fake<MyObject>(); 公共类MyObject{ 公共MyObject(){} } ... MyObject fakeObject=A.Fake(); 这导致未找到具有匹配参数异常的构造函数 接下来我试着: pu

最近我试图使用FakeiTasy,但如果不解决许多怪癖,我无法从一个具体的类中创建一个假类

我尝试了以下方法:

public class MyObject {
public MyObject(){}
}
...
MyObject fakeObject = A.Fake<MyObject>();
公共类MyObject{
公共MyObject(){}
}
...
MyObject fakeObject=A.Fake();
这导致未找到具有匹配参数异常的构造函数

接下来我试着:

public class MyObject {
public MyObject(string temp){}
}
...
MyObject fakeObject = A.Fake<MyObject>(x => x.WithArgumentsForConstructor(() => new MyObject("temp")));
公共类MyObject{
公共MyObject(字符串临时值){}
}
...
MyObject fakeObject=A.Fake(x=>x.WithArgumentsForConstructor(()=>newmyobject(“temp”));
这导致了类似的错误

最后我试着:

public class MyObject {
//public MyObject(){}
}
...
MyObject fakeObject = A.Fake<MyObject>();
公共类MyObject{
//公共MyObject(){}
}
...
MyObject fakeObject=A.Fake();
这让我最终创造了假货。我很困惑,为什么大多数假装一个具体类的例子都暗示这比我发现的更容易?为什么使用上述试验2的记录方法不起作用


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

我无法重现这个问题,当运行等效代码时,它对我来说是有效的。你能创建一个再现问题的vs解决方案吗?

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

我有一门课:

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))));
private-Service-fakeServ=A.Fake((x=>x.WithArgumentsForConstructor(()=>new-Service(3)));
我收到了相同的错误:找不到具有匹配参数的构造函数异常

最后,我使用调试器进行了A.Fake调用,发现构造函数(A.Fake确实调用)中的代码未能初始化全局内存块,因为Visual Studio未在管理员模式下运行。(CreateFileMapping,错误代码5)

我将VisualStudio设置为以管理员身份运行,问题得到了解决,并创建了一个假文件

看起来,用带参数的构造函数创建的伪函数确实会在构造函数中运行(这是我希望通过创建伪函数来避免的,因为全局内存不是我单元测试的重点,我必须研究是否有其他方法可以创建它)

您发布的代码并不表示您正在调用包装类或创建全局内存,但您可以尝试使用调试器单步执行伪创建调用,以查看构造函数是否开始运行,构造函数中是否存在故障,以及返回了哪些错误