2

我有一个包含各种类型的字段/属性等的类:

public string SomeStringData;
public int? SomeNullableIntegerData;
public SomeDataClass SomeSpecificData;
public int SomeIntegerData;

在我的部分代码中,只有SomeStringData应该填写,我想明确地测试一下。我使用FluentAssertions并拥有

actual.SomeStringData.Should().Be("Whatever");

但是如何测试,其他元素都没有被触及并且仍然具有它们的默认值?我当然可以:

actual.SomeNullableIntegerData.Should().NotHaveValue("Must have no value.");
actual.SomeDataClass.Should().BeNull("Must have no value.");
actual.SomeNullableIntegerData.Should().Be(0, "Must have no value.");

但是,如何更清楚地表达这些项目应该具有默认值?

例如,使用假想BeDefault运算符:

actual.SomeNullableIntegerData.Should().BeDefault("Must have no value.");
actual.SomeDataClass.Should().BeDefault("Must have no value.");
actual.SomeNullableIntegerData.Should().BeDefault("Must have no value.");

有这样的选择吗?

4

2 回答 2

4

我会创建扩展方法

public static void ShouldHaveDefaultValue<T>(this T value)
{
    if (!EqualityComparer<T>.Default.Equals(value, default(T)))
        throw new AssertionException("Must have default value.");
}

用法:

actual.SomeNullableIntegerData.ShouldHaveDefaultValue();
actual.SomeDataClass.ShouldHaveDefaultValue();
actual.SomeIntegerData.ShouldHaveDefaultValue();

扩展Should()BeDefault()很困难,因为有不同的Should()扩展会返回不同的断言对象 - BooleanAssertionsStringAssertions等等GuidAssertions。所有这些断言类都没有你可以扩展的通用基类。

于 2014-03-06T12:21:46.793 回答
0

我只是预先捕获以前的值,并断言在执行任何应该进行更改的内容之后,这些值仍然具有它们的默认值。该提议BeDefault的方法永远不能对“默认”做出任何假设。

于 2014-03-06T10:52:01.303 回答