【发布时间】:2019-11-18 17:10:13
【问题描述】:
我有一个具有小数属性的模型,该属性具有Range 属性,并且范围由浮点数组成。我想使用AutoFixture 初始化模型,但它失败了。例如,请尝试运行下面的测试。
using System.ComponentModel.DataAnnotations;
using AutoFixture;
using Xunit;
namespace XUnitTestProject1
{
public class UnitTest1
{
[Fact]
public void AutoFixture_ShouldCreateInstanceOfMyModel()
{
var f = new Fixture();
var randomValue = f.Create<MyModel>();
Assert.NotNull(randomValue);
}
}
public class MyModel
{
[Range(typeof(decimal), "0.1", "1000")]
public decimal MyProp { get; set; }
}
}
它失败了,但有以下异常:
Message:
AutoFixture.ObjectCreationExceptionWithPath : AutoFixture was unable to create an instance from RangedRequest (MemberType: System.Decimal, OperandType: System.Decimal Minimum: [String] 0.1, Maximum: [String] 1000) because creation unexpectedly failed with exception. Please refer to the inner exception to investigate the root cause of the failure.
Request path:
XUnitTestProject1.MyModel
System.Decimal MyProp
RangedRequest (MemberType: System.Decimal, OperandType: System.Decimal Minimum: [String] 0.1, Maximum: [String] 1000)
Inner exception messages:
System.ArgumentException: 0.1 is not a valid value for Decimal.
Parameter name: value
System.FormatException: Input string was not in a correct format.
---- System.ArgumentException : 0.1 is not a valid value for Decimal.
Parameter name: value
-------- System.FormatException : Input string was not in a correct format.
Stack Trace:
at TerminatingWithPathSpecimenBuilder.Create(Object request, ISpecimenContext context) in TerminatingWithPathSpecimenBuilder.cs line: 81
at RecursionGuard.Create(Object request, ISpecimenContext context) in RecursionGuard.cs line: 176
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at TerminatingWithPathSpecimenBuilder.Create(Object request, ISpecimenContext context) in TerminatingWithPathSpecimenBuilder.cs line: 57
at RecursionGuard.Create(Object request, ISpecimenContext context) in RecursionGuard.cs line: 176
at AutoPropertiesCommand`1.Execute(Object specimen, ISpecimenContext context) in AutoPropertiesCommand.cs line: 254
at Postprocessor`1.Create(Object request, ISpecimenContext context) in Postprocessor.cs line: 290
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at TerminatingWithPathSpecimenBuilder.Create(Object request, ISpecimenContext context) in TerminatingWithPathSpecimenBuilder.cs line: 57
at RecursionGuard.Create(Object request, ISpecimenContext context) in RecursionGuard.cs line: 176
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at Postprocessor`1.Create(Object request, ISpecimenContext context) in Postprocessor.cs line: 272
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at TerminatingWithPathSpecimenBuilder.Create(Object request, ISpecimenContext context) in TerminatingWithPathSpecimenBuilder.cs line: 57
at RecursionGuard.Create(Object request, ISpecimenContext context) in RecursionGuard.cs line: 176
at SpecimenFactory.Create[T](ISpecimenContext context) in SpecimenFactory.cs line: 25
at UnitTest1.AutoFixture_ShouldCreateInstanceOfMyModel() in UnitTest1.cs line: 13
at ----- Inner Stack Trace -----
at BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
at RangedRequest.GetConvertedRangeBoundary(Object attributeValue, Type conversionType) in RangedRequest.cs line: 144
at NumericRangedRequestRelay.Create(Object request, ISpecimenContext context) in NumericRangedRequestRelay.cs line: 32
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) in CompositeSpecimenBuilder.cs line: 52
at TerminatingWithPathSpecimenBuilder.Create(Object request, ISpecimenContext context) in TerminatingWithPathSpecimenBuilder.cs line: 57
at ----- Inner Stack Trace -----
at Number.StringToNumber(ReadOnlySpan`1 str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at Number.ParseDecimal(ReadOnlySpan`1 value, NumberStyles options, NumberFormatInfo numfmt)
at Decimal.Parse(String s, NumberStyles style, IFormatProvider provider)
at DecimalConverter.FromString(String value, NumberFormatInfo formatInfo)
at BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
有人可以帮我解决这个问题吗?
【问题讨论】:
标签: autofixture