gpt4 book ai didi

c# - FluentAssertions 因带有枚举但不是类的结构而失败

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:00 26 4
gpt4 key购买 nike

我有一个嵌套的 classFluentAssertions可以断言它们。
然后我改变classstruct并且测试失败。

(如果我将 IEnumerable<ItemStruct> MyItems { get; set; } 更改为 ItemStruct MyItem { get; set; },两种情况下的比较都会成功。所以我猜测它与 IEnumerable 有关。)

using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;

namespace CowsCannotReadLogs.FileHandling.UnitTest
{
[TestClass]
public class TestFluentAssertionStruct
{
public struct DataStruct
{
public IEnumerable<string> MyItems { get; set; }
}

// Fails.
[TestMethod]
public void TestSimpleStruct()
{
var data1 = new DataStruct { MyItems = new[] { "A" } };
var data2 = new DataStruct { MyItems = new[] { "A" } };
data1.Should().BeEquivalentTo(data2);
}

// Fails.
[TestMethod]
public void TestSimpleStructWithComparingByValue()
{
var data1 = new DataStruct { MyItems = new[] { "A" } };
var data2 = new DataStruct { MyItems = new[] { "A" } };
data1.Should().BeEquivalentTo(data2,
options => options.ComparingByValue<DataStruct>());
}


public class DataClass
{
public IEnumerable<string> MyItems { get; set; }
}

// Succeeds.
[TestMethod]
public void TestSimpleClass()
{
var data1 = new DataClass { MyItems = new[] { "A" } };
var data2 = new DataClass { MyItems = new[] { "A" } };
data1.Should().BeEquivalentTo(data2);
}
}
}

最佳答案

struct 上使用 BeEquivalentTo 时,默认情况下这两个实例通过值语义 进行比较。要按成员比较结构,可以在本地或全局覆盖默认行为。

本地测试:

[TestMethod]
public void Test()
{
subject.Should().BeEquivalentTo(expected,
opt => opt.ComparingByMembers<DataStruct>());
}

全局范围内,例如[程序集初始化]:

[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
AssertionOptions.AssertEquivalencyUsing(opt => opt.ComparingByMembers<DataStruct>());
}

关于c# - FluentAssertions 因带有枚举但不是类的结构而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55523956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com