【发布时间】:2018-06-20 09:36:02
【问题描述】:
我正在尝试使用带有 Fixture.Build 的索引器创建对象。不幸的是,我遇到了错误,我无法弄清楚如何正确地做到这一点。
代码示例:
public class EntityWithIndexer
{
private List<string> _list = new List<string>();
public string this[int index]
{
get => _list[index];
set => _list[index] = value;
}
}
public class set_indexed_property_value_example
{
[Fact]
public void run_test()
{
var fixture = new Fixture();
var entity = fixture.Build<CombinationsChangesToDirectChangesSpecs.EntityWithIndexer>()
.With(x => x[0], "Test")
.Create();
Assert.Equal("Test", entity[0]);
}
}
当我运行测试时,抛出以下异常:
System.ArgumentException 表达式的 Body 不是 MemberExpression。这很可能是因为它不代表对属性或字段的访问。 参数名称:propertyPicker 在 C:\projects\autofixture\Src\AutoFixture\Kernel\ExpressionReflector.cs:line 19 中的 AutoFixture.Kernel.ExpressionReflector.GetWritableMember(LambdaExpression propertyPicker) 在 C:\projects\autofixture\Src\AutoFixture\Kernel\ExpressionReflector.cs:line 37 中的 AutoFixture.Kernel.ExpressionReflector.VerifyIsNonNestedWritableMemberExpression(LambdaExpression 表达式) 在 AutoFixture.Dsl.NodeComposer`1.With[TProperty](Expression`1 propertyPicker, TProperty value) 在 C:\projects\autofixture\Src\AutoFixture\Dsl\NodeComposer.cs:line 329 在 AutoFixture.Dsl.CompositeNodeComposer`1.c__DisplayClass12_0`1.b__0(ISpecimenBuilderNode n) 在 C:\projects\autofixture\Src\AutoFixture\Dsl\CompositeNodeComposer.cs:line 324 在 AutoFixture.Kernel.SpecimenBuilderNode.c__DisplayClass4_0.b__1(f__AnonymousType4`2 h__TransparentIdentifier0) 在 C:\projects\autofixture\Src\AutoFixture\Kernel\SpecimenBuilderNode.cs:line 157 在 System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在 System.Linq.Buffer`1..ctor(IEnumerable`1 源) 在 System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 源) 在 AutoFixture.Kernel.CompositeSpecimenBuilder.Compose(IEnumerable`1 builder) 在 C:\projects\autofixture\Src\AutoFixture\Kernel\CompositeSpecimenBuilder.cs:line 67 在 AutoFixture.Kernel.SpecimenBuilderNode.c__DisplayClass4_0.b__1(f__AnonymousType4`2 h__TransparentIdentifier0) 在 C:\projects\autofixture\Src\AutoFixture\Kernel\SpecimenBuilderNode.cs:line 157 在 System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在 AutoFixture.Kernel.CompositeSpecimenBuilder.ComposeIfMultiple(IEnumerable`1 builder) 在 C:\projects\autofixture\Src\AutoFixture\Kernel\CompositeSpecimenBuilder.cs:line 107 在 C:\projects\autofixture\Src\AutoFixture\Kernel\RecursionGuard.cs:line 285 中的 AutoFixture.Kernel.RecursionGuard.Compose(IEnumerable`1 builders) 在 AutoFixture.Kernel.SpecimenBuilderNode.c__DisplayClass4_0.b__1(f__AnonymousType4`2 h__TransparentIdentifier0) 在 C:\projects\autofixture\Src\AutoFixture\Kernel\SpecimenBuilderNode.cs:line 157 在 System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在 System.Linq.Enumerable.d__25`1.MoveNext() 在 System.Linq.Enumerable.Count[TSource](IEnumerable`1 源) 在 AutoFixture.Dsl.CompositeNodeComposer`1.Compose(IEnumerable`1 builders) 在 C:\projects\autofixture\Src\AutoFixture\Dsl\CompositeNodeComposer.cs:line 390 在 AutoFixture.Dsl.CompositeNodeComposer`1.With[TProperty](Expression`1 propertyPicker, TProperty value) 在 C:\projects\autofixture\Src\AutoFixture\Dsl\CompositeNodeComposer.cs:line 0 在 indexer_example.cs:line 29 中的 set_indexed_property_value_example.run_test()【问题讨论】:
标签: c# autofixture