首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoFixture是否支持.NET6的‘`DateOnly`’?

AutoFixture是否支持.NET6的‘`DateOnly`’?
EN

Stack Overflow用户
提问于 2022-09-15 13:38:04
回答 1查看 258关注 0票数 2

我在用DateOnly构造AutoFixture变量/字段时遇到了异常。( TimeOnly工程建设良好)

AutoFixture.ObjectCreationExceptionWithPath :由于创建意外失败,AutoFixture无法从System.DateOnly创建实例。请参考内部异常来调查故障的根本原因。

AutoFixture,AutoFixture.NUnit3 nugets版本: 4.17.0

代码语言:javascript
复制
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
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-15 13:38:04

答案是:目前没有。有一个拉请求:https://github.com/AutoFixture/AutoFixture/pull/1305 (但是它几乎处于开放状态一年,没有任何里程碑)

但有个解决办法。我的临时解决方案是创建AutoFixture定制(CustomFixture.cs)文件,并将其包含到项目中:

代码语言:javascript
复制
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())
    {}
  }
}

在测试代码中包括自定义之后:

代码语言:javascript
复制
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) { } 
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73732174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档