Vac*_*ano 15 .net c# autofixture nsubstitute
我经常使用NSubstitute.我喜欢它.
我只是在研究AutoFixture.看起来很棒!
我见过NSFstitute的AutoFixture,并在Moq中看到了一些如何使用此功能的例子.
但我似乎无法将其翻译成NSubstitute.
我试过这个:
var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());
var addDest = Substitute.For<IPerson>();
Run Code Online (Sandbox Code Playgroud)
使用:
public interface IPersonEntity
{
int ID { get; set; }
string FirstName { get; set;}
string LastName { get; set;}
DateTime DateOfBirth { get; set; }
char Gender { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我得到一个对象,但没有填充任何属性(类似于AutoFixture的点).
我也尝试过:
var fixture = new Fixture().Customize(new AutoNSubstituteCustomization());
var result = fixture.Create<IPersonEntity>();
Run Code Online (Sandbox Code Playgroud)
这也给了我一个没有填充属性的对象.(请注意,如果我使用PersonEntity类进行上述操作,则会填充属性.)
我确信有一种方法可以使这项工作,但我似乎无法找到它.
那么,鉴于我的IPersonEntity界面,有没有人知道如何使用AutoFixture和NSubstitute给我一个填充的IPersonEntity对象?
Nik*_*nis 17
您可以使用以下自定义代替使用自定义Fixture实例AutoNSubstituteCustomization:
var fixture = new Fixture().Customize(
new AutoPopulatedNSubstitutePropertiesCustomization());
var result = fixture.Create<IPersonEntity>();
// -> All properties should be populated now.
Run Code Online (Sandbox Code Playgroud)
的AutoPopulatedNSubstitutePropertiesCustomization定义为:
internal class AutoPopulatedNSubstitutePropertiesCustomization
: ICustomization
{
public void Customize(IFixture fixture)
{
fixture.ResidueCollectors.Add(
new Postprocessor(
new NSubstituteBuilder(
new MethodInvoker(
new NSubstituteMethodQuery())),
new AutoPropertiesCommand(
new PropertiesOnlySpecification())));
}
private class PropertiesOnlySpecification : IRequestSpecification
{
public bool IsSatisfiedBy(object request)
{
return request is PropertyInfo;
}
}
}
Run Code Online (Sandbox Code Playgroud)
与之不同的AutoNSubstituteCustomization是,上述自定义还使用实例进行修饰,Postprocessor以自动为所请求类型的所有公共属性设置值.
参考文献:
以上解决方案的灵感来自Mark Seemann的以下博客文章:
尽管当时其他答案已被标记为正确,但我只是想补充一下,为了完整起见,您确实可以使用 AutoNSubstituteCustomization:
var fixture = new Fixture().Customize(new AutoNSubstituteCustomization() { ConfigureMembers = true});
var result = fixture.Create<IPersonEntity>();
Run Code Online (Sandbox Code Playgroud)
这将导致属性被填充。
| 归档时间: |
|
| 查看次数: |
6489 次 |
| 最近记录: |