【发布时间】:2019-02-13 10:43:19
【问题描述】:
在 AutoFixture 4.8.0 中,除了使用 Fixture.Register 注册函数来创建仅公开 internal 构造函数的类型之外,还有更好的替代方法吗?
在上下文中:
我正在开发一个 .net 标准类库来构建供内部使用的 API。我们不想公开公共构造函数,因此这些模型的所有构造函数都是internal。属性还有public readonly。这些类将通过 Json 反序列化进行实例化,并且在这个特定的库中,有一个模型需要考虑超过 20 个属性。作为奖励,我们希望尽可能使用 [AutoDataAttribute]。
即。除了使用 AutoFixture 提供具有 20 多个参数的内部 jsonconstructor 之外,还有其他方法吗?
[TestFixture]
public sealed class Tests
{
private Fixture _fixture;
[OneTimeSetUp]
public void OneTimeSetup()
{
_fixture = new Fixture();
_fixture.Register(() => new Vehicle(_fixture.Create<string>(), _fixture.Create<int>()));
_fixture.Register(
() => new Driver(_fixture.Create<string>(), _fixture.Create<int>(), _fixture.Create<Vehicle>()));
}
[Test]
public void CanCreateDriverWithVehicle()
{
Func<Driver> func = () => _fixture.Create<Driver>();
func.Should().NotThrow(); // Green
}
}
[PublicAPI]
public sealed class Driver
{
public readonly string Name;
public readonly int Age;
public Vehicle Vehicle;
[JsonConstructor]
internal Driver(string name, int age, Vehicle vehicle)
{
Name = name;
Age = age;
Vehicle = vehicle;
}
}
[PublicAPI]
public sealed class Vehicle
{
public readonly string Manufacturer;
public readonly int Miles;
[JsonConstructor]
internal Vehicle(string manufacturer, int miles)
{
Manufacturer = manufacturer;
Miles = miles;
}
}
【问题讨论】:
标签: c# autofixture