我在用DateOnly构造AutoFixture变量/字段时遇到了异常。( TimeOnly工程建设良好)
AutoFixture.ObjectCreationExceptionWithPath :由于创建意外失败,AutoFixture无法从System.DateOnly创建实例。请参考内部异常来调查故障的根本原因。
AutoFixture,AutoFixture.NUnit3 nugets版本: 4.17.0
using AutoFixture;
using AutoFixture.NUnit3;
using NUnit.Framework;
namespace UnitTests
{
[TestFixture]
public class AutoFixtureCreateTests
{
private readonly Fixture fixture = new();
[SetUp]
public void Setup()
{
var date = fixture.Create<DateOnly>(); //fails
var time = fixture.Create<TimeOnly>(); //works fine
}
[Test, AutoData]
public void CreateString(string str) { } //works fine
[Test, AutoData]
public void CreateDateOnly(DateOnly date) { } //fails
[Test, AutoData]
public void CreateTimeOnly(TimeOnly time) { } //works fine
}
}发布于 2022-09-15 13:38:04
答案是:目前没有。有一个拉请求:https://github.com/AutoFixture/AutoFixture/pull/1305 (但是它几乎处于开放状态一年,没有任何里程碑)
但有个解决办法。我的临时解决方案是创建AutoFixture定制(CustomFixture.cs)文件,并将其包含到项目中:
using AutoFixture;
using AutoFixture.NUnit3;
namespace UnitTests
{
public class CustomFixture
{
public static Fixture Create()
{
var fixture = new Fixture();
fixture.Customize<DateOnly>(composer => composer.FromFactory<DateTime>(DateOnly.FromDateTime));
return fixture;
}
}
public class CustomAutoDataAttribute : AutoDataAttribute
{
public CustomAutoDataAttribute()
: base(()=>CustomFixture.Create())
{}
}
}在测试代码中包括自定义之后:
using AutoFixture;
using AutoFixture.NUnit3;
using NUnit.Framework;
namespace UnitTests
{
[TestFixture]
public class AutoFixtureCreateTests
{
private readonly Fixture fixture =
CustomFixture.Create(); //custom factory
[SetUp]
public void Setup()
{
var date = fixture.Create<DateOnly>(); //now works
var time = fixture.Create<TimeOnly>();
}
[Test, AutoData]
public void CreateString(string str) { }
[Test, CustomAutoData] //custom attribute
public void CreateDateOnly(DateOnly date) { } //now works
[Test, AutoData]
public void CreateTimeOnly(TimeOnly time) { }
}
}https://stackoverflow.com/questions/73732174
复制相似问题