我有以下课程:
class Foo
{
public Foo(string str, int i, bool b, DateTime d, string str2)
{
.....
}
}
Run Code Online (Sandbox Code Playgroud)
我正在Foo使用AutoFixture 创建一个:
var foo = fixture.Create<Foo>();
Run Code Online (Sandbox Code Playgroud)
但我希望AutoFixture为str2参数提供已知值,并为每个其他参数使用默认行为.
我尝试实现一个SpecimenBuilder但我无法找到一种方法来获取与请求相关联的元数据,以便知道我是从Foo构造函数调用的.
有没有办法实现这个目标?
Orl*_*iam 11
在这里回答你可以有类似的东西
public class FooArg : ISpecimenBuilder
{
private readonly string value;
public FooArg(string value)
{
this.value = value;
}
public object Create(object request, ISpecimenContext context)
{
var pi = request as ParameterInfo;
if (pi == null)
return new NoSpecimen(request);
if (pi.Member.DeclaringType != typeof(Foo) ||
pi.ParameterType != typeof(string) ||
pi.Name != "str2")
return new NoSpecimen(request);
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样注册它
var fixture = new Fixture();
fixture.Customizations.Add(new FooArg(knownValue));
var sut = fixture.Create<Foo>();
Run Code Online (Sandbox Code Playgroud)
这回答了类似的问题,但使用自定义类型,例如MyType。当给出:
class Foo
{
public Foo(string str, MyType myType)
{
.....
}
}
class MyType
{
private readonly string myType;
public MyType(string myType)
{
this.myType = myType
}
}
Run Code Online (Sandbox Code Playgroud)
您可以致电
fixture.Customize<MyType>(c => c.FromFactory(() => new MyType("myValue")));
var foo = fixture.Build<Foo>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8120 次 |
| 最近记录: |