gpt4 book ai didi

c# - 如何更新除特定值之外的枚举值

转载 作者:行者123 更新时间:2023-12-04 01:37:08 24 4
gpt4 key购买 nike

我的 UnitTest 的目标是验证 ValidateEquality对于 FooClass 的两个不相等的实例,将返回 false .

我只询问单元测试的安排部分,而行为和断言并不重要。

我有一个构建器外观正在创建所需的假实例 FooClass ( BuilderFacade.BuildFooClass() ) 和创建它的真实实例的真实服务 api ( GetFooClassFromSomewhere )。

问题在于BuilderFacade创建一个随机 E_BooEnum值,并且为了这个单元测试将 每次都通过我需要实例化 foolClass2BooEnumfooClass1 不同的值的 BooEnum随机值。

如何发起BooEnum除了假实例值之外的值?

[TestMethod]
public void AreEqual_DifferentBooEnum_ShouldReturnFalse()
{
//Arrange:
FooClass fooClass1 = BuilderFacade.BuildFooClass();
FooClass fooClass2 = GetFooClassFromSomewhere();
fooClass2.BooEnum = ! fooClass1.BooEnum // <--------Every possible value is OK besides the `fooClass1.BooEnum` value.

...
//Act
var result = service.ValidateEquality(fooClass1, fooClass2);
//Assert
Assert.IsFalse(result);
}

public class BuilderFacade
{
public static FooClass BuildFooClass()
{
Random rand = new Random();
E_BooEnum booEnum = (E_BooEnum)rand.Next(System.Enum.GetNames(typeof(E_BooEnum)).Length);
return new FooClass()
{
BooEnum = booEnum
};
}
}

该模型:
public class FooClass
{
public E_BooEnum BooEnum { get; set; }
public override in GetHashCode()
{
unchecked
{
int hash = 17;
hash = hash * 31 + this.BooEnum.GetHashCode();
}
}
}

最佳答案

使用固定值而不是随机值。
在测试中,您希望控制传递给测试类的值。

将方法添加到接受枚举值的构建器并将其设置为 FooClass

public class FooBuilder
{
private readonly BooEnum _boo;

public FooBuilder(BooEnum boo)
{
_boo = boo;
}

public FooClass Create()
{
return new FooClass()
{
BooEnum = _boo
};
}
}

不确定 MSTest,但例如在 xUnit 中,您可以使用内联参数进行测试,您可以在其中提供具有预期验证结果的所有枚举值
[Theory]
[InlineData(BooEnum.First, BooEnum.Second, false)]
[InlineData(BooEnum.Second, BooEnum.First, false)]
[InlineData(BooEnum.First, BooEnum.First, true)]
[InlineData(BooEnum.Second, BooEnum.Second, true)]
public void AreEqual_DifferentBooEnum_ShouldReturnFalse(BooEnum first, BooEnum second, bool expected)
{
var firstFoo = new FooBuilder(first).Create();
var secondFoo = new FooBuilder(second).Create();

var actual = service.ValidateEquality(firstFoo, secondFoo);

actual.Should().Be(expected);
}

关于c# - 如何更新除特定值之外的枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59123196/

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