C# 使用业务对象作为测试数据生成器类的返回值
业务对象是Foo.cs 如果Foo的属性运行自定义逻辑呢?那么,创建Foo对象不是一个坏主意吗?它可以更改Foo对象内部的数据,并返回我不期望的值C# 使用业务对象作为测试数据生成器类的返回值,c#,builder,test-data,C#,Builder,Test Data,业务对象是Foo.cs 如果Foo的属性运行自定义逻辑呢?那么,创建Foo对象不是一个坏主意吗?它可以更改Foo对象内部的数据,并返回我不期望的值 public class FooBuilder { private string bar = "defaultBar"; private string baz = "defaultBaz"; private string bling = "defaultBling"; public FooBuilder Bar(st
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};
}
}
如果我理解你的要求 对于property来说,执行一些代码而不是设置备份字段是可以的。但是,如果您将一个属性设置为一个值,然后使用getter并发现它返回的值与您设置的值不同,那么这是意外的。因此,要么在属性中避免这种情况,要么使用对行为/数据更改提供描述性含义的方法 所以这很糟糕
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
如果我理解你的要求 对于property来说,执行一些代码而不是设置备份字段是可以的。但是,如果您将一个属性设置为一个值,然后使用getter并发现它返回的值与您设置的值不同,那么这是意外的。因此,要么在属性中避免这种情况,要么使用对行为/数据更改提供描述性含义的方法 所以这很糟糕
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
对不起,您的问题的措辞让我很难理解。对不起,您的问题的措辞让我很难理解。但这意味着在我的业务对象Foo中,我无法在酒吧中运行业务逻辑?!只要该属性的getter返回您期望的值,您就可以使用它。如果您有复杂的业务逻辑,那么也许您应该考虑使用Methods,我更希望得到这样的答案:“您不应该使用业务对象来完成此任务,而应该使用数据访问对象”。你怎么想?但这意味着在我的业务对象Foo中,我不能在酒吧属性中运行业务逻辑?!只要该属性的getter返回您期望的值,您就可以使用它。如果您有复杂的业务逻辑,那么也许您应该考虑使用Methods,我更希望得到这样的答案:“您不应该使用业务对象来完成此任务,而应该使用数据访问对象”。你怎么认为?