我有一个不可变的 DTO,我想用Bogus Faker(版本 31.0.2)伪造它,但具有覆盖规则的属性只返回构造函数初始化的内容:
示例 DTO(真实的更复杂)
using Xunit;
using Bogus;
namespace SO.Tests
{
class ClassWithInitialization
{
public ClassWithInitialization(string name)
{
this.Name = name
}
public string Name { get; }
}
示例 DTO 伪造者
class FakeClassWithInitialization : Faker<ClassWithInitialization>
{
private FakeClassWithInitialization() { }
public static CreateDefault()
{
return (FakeClassWithInitialization) new FakeClassWithInitialization()
.CustomInstantiator(f => new ClassWithInitialization(null))
.RuleFor(o => o.Name, f => f.Person.FullName);
}
public FakeClassWithInitialization WithName(string name)
{
RuleFor(o => o.Name, f => name);
return this;
}
}
示例测试
以下两个测试都失败,因为 Name 属性仍然为构造函数中提供的 null。
public class Tests
{
[Fact]
public void TestClassWithInitialization()
{
var faker = FakeClassWithInitialization
.CreateDefault();
var testPoco = faker.Generate();
Assert.False(string.IsNullOrEmpty(testPoco.Name)); #fails
}
[Fact]
public void TestClassWithInitialization_with_overriding_rule()
{
var faker = FakeClassWithInitialization
.CreateDefault()
.WithName("John Smith");
var testPoco = faker.Generate();
Assert.AreEqual("John Smith", testPoco.Name); #fails
}
}
}
虽然我可以使用 Faker 为构造函数生成随机数据,但我希望能够使用这个假实例来生成替代版本,例如,上面第二个测试示例具有固定名称。
为什么这不起作用,是否有任何已知的解决方法?