【发布时间】:2022-12-14 00:09:06
【问题描述】:
AutoFixture 不适用于注册和其他自定义调用。如果我只做两者之一,它就会起作用。自定义功能的整个行为对我来说很难理解。这是按设计工作的吗?
目标:对特殊类使用最贪婪的构造函数和OmitAutoProperties。
public interface IDataProvider { }
public class FileDataProvider : IDataProvider {}
public class TestClass
{
public TestClass() : this (new FileDataProvider()) { }
public TestClass(IDataProvider dataProvider) { } // should be used from AutoFixture
}
[Fact]
public void Method_State_Result()
{
var fixture = new Fixture();
fixture.Register(() => fixture.Build<DocumentClient>().OmitAutoProperties().Create());
var dc1 = fixture.Create<DocumentClient>(); // working
fixture.Customize(new AutoNSubstituteCustomization());
fixture.Customizations.Add(new MethodInvoker(new GreedyConstructorQuery()));
var dc2 = fixture.Create<DocumentClient>(); // crash with "AutoFixture was unable to create an instance from System.SByte*, most likely because it has no public constructor, is an abstract or non-public type"
var dc3 = fixture.Create<TestClass>();
}
解决方法是像这样进行注册。但感觉不是正确的解决方案......
fixture.Register(() => new Fixture().Build<DocumentClient>().OmitAutoProperties().Create());
【问题讨论】:
-
好问题。我一直想知道这一点。
-
我已经找到了解决我的问题的方法,但仍然很好奇其他一些解决方案的外观。
标签: c# autofixture