C# 如何为单元测试伪造fluent构造函数

C# 如何为单元测试伪造fluent构造函数,c#,unit-testing,constructor,mocking,fluent,C#,Unit Testing,Constructor,Mocking,Fluent,我有一个类具有另一个类类型的属性: public class MyClass { public DepdendenceClass DependenceProp { get; set; } private MyClass(){} public MyClass(MyClassFactory factory) { this.DependenceProp = factory.DependenceProp; } } public class De

我有一个类具有另一个类类型的属性:

public class MyClass
{
    public DepdendenceClass DependenceProp { get; set; }

    private MyClass(){}
    public MyClass(MyClassFactory factory)
    {
        this.DependenceProp = factory.DependenceProp;
    }
}

public class DepdendenceClass
{
    public int key { get; set; }

    private DepdendenceClass() { }
    public DepdendenceClass(DepdendenceClassFactory factory)
    {
        this.key = factory.key;
    }
}
我隐藏了基本构造函数,因为我不希望它可以创建空实例

每个都有一个流畅有序的构造函数,让我编写这个测试:

[Test]
public void MyClassConstructorTest()
{
    DepdendenceClass depdendencePropExpected = DepdendenceClassFactory.InitCreation()
                                                    .WithKey(1)
                                                    .Create();

    MyClass myClassActual = MyClassFactory.InitCreation()
                        .WithDependency(depdendencePropExpected)
                        .Create();
    Assert.That(myClassActual.DependenceProp, Is.EqualsTo(depdendencePropExpected));
}
有没有办法将MyClassConstructor测试与第二个类的构造函数隔离开来

我隐藏了基本构造函数,因为我不希望它可以创建空实例

如果要向应用程序的其余部分隐藏默认构造函数,但要在测试项目中使用它,则应将默认构造函数显式定义为内部构造函数:

internal MyClass(){}
然后将InternalsVisibleTo属性添加到定义MyClass的项目的AssemblyInfo.cs

如果测试项目的名称为:MySolution.Fixtures,则您将拥有:

[assembly: InternalsVisibleTo("MySolution.Fixtures")]

通过这种方式,您可以在测试中使用默认构造函数,并将其与fluent构造函数隔离

当您在类中声明至少一个构造函数时,将不再生成默认构造函数。所以在你的两个类中,私有构造函数都是毫无意义的。谢谢,我只是在我学习fluent构造函数并使用它的帖子中找到了私有构造函数,少写一行:)是的,可以作为一种解决办法,我读了它,但没有想到它,因为我正在搜索完全与构造函数隔离并编写。WithDependency(fake)在这种情况下,您需要创建一个接口:IDependenceClass并修改WithDependency的签名以接受该接口。然后你可以提供一个假的实现或者使用一个模拟框架。。。对于这种类型的测试来说,它只是太大了,现在需要测试,但不起作用:我的测试方法位于名为“FunzIA.UnitTest.DL”的项目的“Tests”文件夹中。我向assemblyInfo添加了以下内容:[assembly:InternalsVisibleTo(“FunzIA.UnitTest.DL”)],但编译器说没有找到没有参数的方法语法是正确的。该属性应放置在定义MyClass的程序集中。你有没有检查它是否放在正确的组件中?