作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 UnitTest 的目标是验证 ValidateEquality
对于 FooClass
的两个不相等的实例,将返回 false .
我只询问单元测试的安排部分,而行为和断言并不重要。
我有一个构建器外观正在创建所需的假实例 FooClass
( BuilderFacade.BuildFooClass()
) 和创建它的真实实例的真实服务 api ( GetFooClassFromSomewhere
)。
问题在于BuilderFacade
创建一个随机 E_BooEnum
值,并且为了这个单元测试将 每次都通过我需要实例化 foolClass2
与 BooEnum
与 fooClass1
不同的值的 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
};
}
}
[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/
我是一名优秀的程序员,十分优秀!