使用业务对象作为测试数据生成器类的返回值



业务对象是Foo.cs

如果Foo的属性运行自定义逻辑呢?那么,创建Foo对象是否不是一个坏主意,它可以更改Foo对象内部的数据,并返回我不期望的值?!

public class FooBuilder
{
    private string bar = "defaultBar";
    private string baz = "defaultBaz";
    private string bling = "defaultBling";
    public FooBuilder Bar(string value)
    {
        bar = value;
        return this;
    }
    public FooBuilder Baz(string value)
    {
        baz = value;
        return this;
    }
    public FooBuilder Bling(string value)
    {
        bling = value;
        return this;
    }
    public Foo Build()
    {
        return new Foo {Bar = bar, Baz = baz, Bling = bling};
    }
}

如果我理解你的要求。。。

对于proprties来说,执行某些代码比设置后备字段更多是可以的。但是,如果您将一个属性设置为一个值,然后使用getter,发现它返回了与您设置的值不同的值,那么这是出乎意料的。因此,要么在属性中避免这种情况,要么使用对行为/数据变化具有描述性意义的方法。

所以这个IMO是糟糕的

var foo = new Foo();
foo.Bar = "hello bar";
string bar = foo.Bar;
Console.WriteLine(bar); // if this does not print "hello bar" then it is bad/unexpected

最新更新